2011-05-25 161 views
1

我很新的Flash和我有一些麻煩:閃光AS3事件分派

所以,我有我的課主要是進口類,NavMenu。在有一個點擊項目相關的事件,運行在那裏我寫一個函數:

dispatchEvent(new Event('my_event')); 

在我的主類,在構造函數中我已經宣佈

addEventListener('my_event', my_event_handler); 

,我有我想要的事件處理程序從舞臺上刪除一些孩子:

private function my_event_handler(event:Event):void 
{ 
    trace("my Event"); 
} 

沒有任何反應,有人可以告訴我我做錯了什麼嗎?

感謝

回答

3

需要分配監聽調度它的對象。從你的代碼,目前還不清楚是做什麼的 - 但是,例如,在主:

//類主要

var _newClass:NewClass = new NewClass(); 
_newClass.addEventListener("my_event"), handler); 

,然後分派事件的NewClass

//class NewClass 
this.dispatchEvent(new Event("my_event")); 

現在,你似乎正在發射事件,但是你將偵聽器添加到了錯誤的對象(在這種情況下,我認爲Main類,它不是也在進行調度)。

注意 - 如果您在NewClass的構造函數中分派事件,您可能會錯過該事件,因爲在事件發生後您將分配偵聽器。所以在別處開火。

  • 更新 -

正如@redconservatory指出,和@Prototypical,氣泡可以在這種情況下被利用。但是,有一些限制。

通常情況下,如果在eventListener方法sig中使用use_capture參數== false(缺省值),那麼確實需要直接針對某個對象接收事件。爲了使冒泡階段:

this.addEventListener("my_event", handler, true); //use_capture == true 

分派事件現在將成爲活動的符合條件的目標,因爲它「泡沫」備份層次結構中的兒童的家長。在這種情況下,@ redconservatory的答案是正確的。這裏的重要例外是冒泡只適用於DisplayObjects。 NewClass必須將DisplayObject或一個祖先擴展到顯示列表中,冒泡才能正常工作。

從LiveDocs中

捕獲和冒泡發生,因爲從節點事件對象移動到顯示列表節點:捕捉和兒童對父母的起泡家長對孩子。這個過程與繼承層次無關。除了定位階段之外,只有DisplayObject對象(容器和控件等可視對象)可以具有捕獲階段和冒泡階段。

有關事件傳播這個非常重要的主題的完整討論 - 請查看introduction to event handling

+1

這個答案和關於其他答案冒泡的信息應該可以合併爲一個最終答案。兩者都可以工作(假設他的導航菜單真正連接到主類),但排除任一解決方案似乎都不正確。我會建議解釋一些冒泡。 – prototypical 2011-05-25 18:36:34

2

嘗試使事件冒泡到主類

dispatchEvent(new Event('my_event', true)); // "true" sets bubbling to true 

而在的addEventListener使聽者上主要的階段:

stage.addEventListener('my_event', my_event_handler);