我有一个自定义组件,它包含一个子图标。如果我向组件(click-listener1)和icon(click-listener2)添加鼠标单击事件侦听器,则事件调度序列为click-listener2,然后是click-listener1。我能理解。但是,如果我向组件(listener1)添加自定义事件,并将鼠标单击事件添加到图标(listener2),则单击图标时,组件将调度自定义事件。在我的测试中,事件调度序列是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");
}
在Application中,其中包含组件
component.addEventListener(CustomEvent.CUSTOM_EVENT, customEventHandler);
private function customEventHandler(event:CustomEvent):void {
trace ("Listener1");
}
答案 0 :(得分: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