使用侦听器函数

handleEvent 语法不同,有几个侦听器函数可以处理不同的事件。因此,您可以不在 myHandler 中使用 ifelse if 检查,而只需为 change 事件定义 myChangeHandler,为 scroll 事件定义 myScrollHandler,然后注册它们,如下所示:

myList.addEventListener("change", myChangeHandler);
myList.addEventListener("scroll", myScrollHandler);

要使用侦听器函数,必须先定义一个函数:

function myFunction:Function(evtObj:Object){
    // 此处是您的代码 
}

提示

evtObj 参数是在事件被触发时自动生成并传递给该函数的对象。该事件对象的属性包含有关事件的信息。有关详细信息,请参阅关于事件对象

然后,从广播事件的组件实例调用 addEventListener() 方法。addEventListener() 方法采用两个参数:一个是指示事件名称的字符串,另一个是对函数的引用。

componentInstance.addEventListener("eventName", myFunction);

您可以从任何组件实例调用 addEventListener();它包含在每一个源自 EventDispatcher 类的 UI 组件中。有关详细信息,请参阅《ActionScript 2.0 组件语言参考》中的"EventDispatcher.addEventListener()"

有关组件广播的事件的信息,请参阅《ActionScript 2.0 组件语言参考》中每个组件的条目。

若要在 Flash (FLA) 文件中注册侦听器对象,请执行以下操作:

  1. 在 Flash 中,选择"文件">"新建",创建一个新的 Flash 文档。
  2. 将 List 组件从"组件"面板拖到舞台上。
  3. 在"属性"检查器中,输入实例名称 myList
  4. 在时间轴中选择第 1 帧。
  5. 选择"窗口">"动作"。
  6. 在"动作"面板中输入以下代码:
    // 声明变量
    var myList:mx.controls.List;
    var myHandler:Function;
    
    // 将项目添加到列表
    myList.addItem("Bird");
    myList.addItem("Dog");
    myList.addItem("Fish");
    myList.addItem("Cat");
    myList.addItem("Ape");
    myList.addItem("Monkey");
    
    // 定义 myHandler 函数
    function myHandler(eventObj:Object){
    
        // 使用 eventObj 参数
        // 捕获事件类型
        if (eventObj.type == "change"){
                trace("The list changed");
        } else if (eventObj.type == "scroll"){
                trace("The list was scrolled");
        }
    }
    
    // 向 myList 注册 myHandler 函数。
    // 当选中一个项目(触发 change 事件)或
    // 滚动列表时,执行 myHandler。
    myList.addEventListener("change", myHandler);
    myList.addEventListener("scroll", myHandler);
    

    注意

    事件对象 evttype 属性是对事件名称的引用。

  7. 选择"控制">"测试影片";然后在列表中选择一个项目,并滚动列表以便在"输出"面板中查看结果。

    小心

    在侦听器函数中,关键字 this 引用的是调用 addEventListener() 的组件实例,而不是在其中定义该函数的时间轴或类。但是,您可以使用 Delegate 类将侦听器函数委托到不同的范围。请参阅委托事件。要查看函数范围的示例,请参阅关于侦听器中的范围