我在事件冒泡中看到了一些怪异,这表明我真的不明白这应该如何工作。事件冒泡奇怪
我有一个扩展DataGroup的组件,它的项目渲染器调度一个事件(泡泡)。
// MyRenderer.mxml
<s:ItemRenderer>
<s:Button click='dispatchEvent(new Event('customEvent',true))' />
</s:ItemRenderer>
DataGroup将事件的侦听器添加到自身。
// MyDataGroup.mxml
<s:DataGroup itemRenderer="MyRenderer" creationComplete='onCreationComplete()'>
<fx:Metadata>
[Event(name='customEvent',type='flash.events.Event')]
</fx:Metadata>
<fx:Script>
private function onCreationComplete():void
{
addEventListener('customEvent',onCustomEvent);
}
private function onCustomEvent(event:Event):void
{
}
</fx:Script>
</s:DataGroup>
数据组的父项也正在为该事件添加侦听器。
// MyComponent.mxml
<s:Group>
<MyDataGroup customEvent='onCustomEventHandler()' />
</s:Group>
我会预计在MyDataGroup
注册的处理程序应该先抓住事件,那么处理程序MyComponent
。
但是,我看到相反 - 即,在MyComponent
中捕获,然后在MyDataGroup
。被捕时,event.phase == EventPhase.BUBBLING
。
这是怎么回事?为什么我看到这种行为?
我正在使用Flex 4.0。
MyDataGroup没有事件侦听器的处理函数。我认为这是一个复制和粘贴错字,因为我不希望你的代码实际编译该错误。请指定您使用的SDK版本。你理解什么应该与我的相似,所以这种行为是意想不到的。每个组件都在单独的文件中?或者你在线做事情? – JeffryHouser 2011-01-12 18:01:30
谢谢,我已更新纠正错误(是的,只是一个复制'N'贴问题)。所有类都有自己的mxml文件。 – 2011-01-12 18:08:03