0

我有一个自定义组件,它包含一个子图标。如果我向组件(click-listener1)和图标(click-listener2)添加鼠标单击事件侦听器,则事件调度顺序是 click-listener2,然后是 click-listener1。我能理解。但是,如果我向组件 (listener1) 添加自定义事件,并将鼠标单击事件添加到 icon(listener2),当单击 icon 时,组件将调度自定义事件。在我的测试中,事件调度顺序是 listener1,然后是 listener2。它与事件气泡规则不匹配。

在我看来,自定义事件是在 listener2 中调度的,这会触发 listener1。为什么事件流顺序不是listener2,listener1?

在组件中。

 icon.addEventListener(MouseEvent.CLICK, iconClickHandler);

    private function iconClickHandler(event:MouseEvent):void
    {
       trace ("Listener2");  
       var customEvent:CustomEvent= new CustomEvent(CustomEvent.CUSTOM_EVENT, true, true);
       dispatchEvent(customEvent)
       trace ("Listener3");  
    }

在应用程序中,其中包含组件

 component.addEventListener(CustomEvent.CUSTOM_EVENT, customEventHandler);

private function customEventHandler(event:CustomEvent):void {
   trace ("Listener1");  
}
4

1 回答 1

0

UPD

你有:

private function iconClickHandler(event:MouseEvent):void
{
    trace("listener2");
    var customEvent:CustomEvent= new CustomEvent(CustomEvent.CUSTOM_EVENT, true, true);
    dispatchEvent(customEvent);
    trace("listener3");
}


private function customEventHandler(event:CustomEvent):void
{
    trace("listener1");
}

MouseEvent.MOUSE_CLICK被调度时,它会触发第一个幸运的监听器——它是你的组件函数iconClickHandler。在这里,我们跟踪“listener2”并调度自定义事件。

由于事件的同步性,CUSTOM_EVENT侦听器会立即触发,这意味着调度事件类似于调用侦听器函数。事件不会存储在任何地方,它们不会延迟:事件的侦听器会立即触发,在同一个控制流中,在同一个线程中。

CUSTOM_EVENT被调度,它的监听器被触发——我们customEventHandler在控制台中调用了“listener1”。

当所有的侦听器都被触发时,控制权返回iconClickHandler并且“listener3”被追踪到控制台。

这就是我们得到输出的原因:

listener2
listener1
listener3
于 2011-08-22T06:17:45.380 回答