2010-06-29 52 views
1

我有一個flex應用程序,這個應用程序的顯示是用許多容器構建的。 我在每個displayObjects上都有一個FlexEvent.UPDATE_COMPLETE。flex中的事件控件as3(事件順序)

我想完成什麼? 我只想在事件發生的頂層處理事件,例如,如果我有一個網格,並且更新發生在某個標籤內的某個標籤上,我只想在網格上處理該事件。

有沒有辦法做到這一點?

只是爲了強調,在編譯時我沒有任何有關顯示對象的知識,只有在運行時,顯示器才被動態構建,我不能只在網格上寫代碼,我必須檢查不知怎的,如果事件發生在更高層次。

我會喜歡這個問題的一些幫助,即使它不是代碼,但如何處理這個獨特的問題的概念。

感謝

回答

0

你有沒有在事件被認爲stopPropagation()/ stopImmediatePropagation(),一旦你處理該事件。

示例: 由於您的按鈕位於畫布中。您在畫布中的事件處理函數方法如下所示:

function handleEvent(e:FlexEvent):void { 
trace("In Canvas's handler"); 
//do your events... 
e.stopPropagation(); //This stops from propagating e to its parent containers, which is an HBOX. The container can be anything at runtime, it doesnt affect the propagation. 

} 

請嘗試在其他容器中使用相同的示例。

這裏的一些例子,

http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html

http://livedocs.adobe.com/flex/3/langref/flash/events/Event.html#stopPropagation%28%29

+0

我是這些的潔具,他們如何幫助我在這裏? 我舉一個例子,我有一個按鈕,它包含在一個畫布內,並且這個畫布在一個HBOX中(再次,我沒有編譯時的這個知識,只在運行時) 一旦事件發生它會在按鈕和Canvas上觸發,但不會在HBox上觸發,我只想在Canvas上處理該事件一次。 – KensoDev 2010-06-29 10:46:08

+0

編輯我的答案,問題只是停止事件傳播。 – prem 2010-06-29 11:01:27

+0

父母可能依靠孩子的updateComplete事件 - 這可能會破壞某些東西......必須檢查Flex組件實例化生命週期以確認。 – Amarghosh 2010-06-29 11:42:10

0

只是檢查的event.target和忽略,如果它是不是你要找的東西。或者甚至更好:監聽頂級組件上的事件,並忽略是否targetcurrentTarget不匹配。

if(event.target != event.currentTarget) 
    return; 

如果你不能做到這一點無論檢查家長:如果父母是你的應用程序或保存頂級項目的容器,它是一個頂級項目。基於你的組件的結構,它可以是任何類似的東西

if(event.target.parent == this) 
//or 
if(event.target.parent == this.theContainer_thatHolds_topLevelItems) 
//or 
if(event.target.parent is Application) 
//or 
if(event.target.parent is CustomContainerClassName)