我有一个自定义组件,它包含一个子图标。如果我将鼠标单击事件侦听器添加到组件(click-listener1)和图标(click-listener2),则分派的事件序列为click-listener2,然后单击listener1。我能理解它。但是,如果我将自定义事件添加到组件(listener1),并将鼠标单击事件添加到图标(listener2),则单击图标时,组件将分派自定义事件。在我的测试中,事件派发顺序是listener1,然后是listener2。它与事件泡泡规则不匹配。Flex内置事件和自定义事件的事件流程
在我看来自定义事件分派在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");
}
其实iconClickHandler是LISTENER2。令我困惑的是CUSTOM_EVENT监听器比iconClickHandler发生的早,它派遣CUSTOM_EVENT –
再次检查所有内容。确保:你的跟踪语句(或者你如何检查处理程序的顺序)是否正确编写,并排除混乱(在任何调用下一个dispatchEvent之前)。您的自定义事件名称与任何其他事件名称都不匹配;你的听众和事件有适当的冒泡和标题标志; – moropus
是的,在iconClickHandler函数中,dipatched事件应该是customEvent。我修改了它。我通过Flash palyer调试来检查处理程序的顺序。订单是customEventHandler,iconClickHandler –