我在事件冒泡中看到了一些怪異,這表明我真的不明白這應該如何工作。事件冒泡奇怪
我有一個擴展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