2013-11-27 53 views
0

我今天的問題是關於我們註冊事件監聽器的方式。AS3:註冊事件監聽器的最佳方式

比方說,我們有一個Group元素,裏面有一個自定義的Handler元素。我們希望Handler元素在Group觸發自定義事件時執行某些操作。現在,做這件事的最好方法是什麼?

var group:Group = new Group(); 
var handler:Handler = new Handler(); 
group.addElement(handler); 

現在,什麼是註冊事件監聽器的最佳方式?
1.下去,並做到這一點從我們初始化的對象

group.addEventListener("CustomEvent", handler.handlerFunction); 

2.註冊從Handler的類的事件偵聽器的文件:

parent.addEventListener("CustomEvent", handlerFunction); 

3.任何其他方式?

+2

我假設他們不顯示對象(是嗎?)。你究竟想達到什麼目的?你真的需要爲每個對象註冊監聽器嗎?你爲什麼不在'父'上發生事件時只爲所有孩子調用一個方法? – Fygo

+0

他們顯示的對象,但我只是爲了例子,我沒有在這裏寫任何代碼。對於第二個問題,答案是因爲我希望它們儘可能鬆散耦合 – Andrew

回答

1

您可以讓Group類實例直接在Handler類實例上調度自定義事件。 Handler類會在構造函數中註冊一個內部監聽器。

public function Handler() { 
    addEventListener("CustomEvent", handlerFunction); 
} 

組類將下列方式分派事件:

handler.dispatchEvent(new CustomEvent()); 
+0

如果有多個Handler的實例會怎麼樣? – Andrew

+1

我假設組有一個關於處理程序的概述。在這種情況下,循環將用於爲所有處理程序分派事件。它的缺點是聽衆的優先級丟失。如果Group沒有關於處理程序的概述,我會使用一些我稱之爲EventBus的東西。這是一個對象,可供Group和Handler使用。組對它發送事件,Handler將偵聽器附加到它上面。 –