0

我有一個flex組件的代碼,我想監聽一個事件,事件的來源是另一個類正在運行的另一個類運行的自定義類等等。我的印象是一個事件將通過在整個應用程序,所以我希望如果我派遣在像這樣的類自定義事件..一個事件能走多遠,我該如何聽?

private function finishEvent():void { 
     var evt:EventDispatcher = new EventDispatcher; 
     var finished:Event = new Event("finishedInterpret"); 
     evt.dispatchEvent(finished); 
    } 

然後我可以抓住它在我的部分是這樣的:

public function interpret(data:Array):void { 
    addEventListener("finishedInterpret", applyInferences); 
    db.executeBatch(); 
} 

事件在executeBatch完成時基本被觸發,finishEvent被調用,但我是l istener沒有得到任何東西。我試着將它設置爲db.addEventListener,但現在已經有效。

回答

1

事件應該發生的方式是對象調度事件,而這些事件的消費者監聽來自該對象的事件。除非您有全局事件分派器(不是典型的),否則沒有應用程序範圍的事件分派。

我發現這是最好的使用模式:子組件調度事件,以及這些孩子的所有者監聽他們的事件。例如:

child.addEventListener("finishedInterpret", applyInferences); 

由於是,你的代碼是偵聽來自自身事件

+0

啊我明白了。不幸的是,我正在使用的那個類中的組件確實已經完成,它幾乎被埋在了幾個級別的調用中。所以我基本上必須將事件傳遞到每個級別,然後我想.. hrmph希望不要必須大量修改該代碼 – Damon 2011-03-29 23:05:29

+0

您可以使用事件冒泡。這將允許事件通過多層傳播到顯示樹中的第一個監聽祖先。 – Jacob 2011-03-29 23:13:21

+0

啊..我以爲這是默認啓用。當我嘗試將氣泡設置爲true時,它是隻讀屬性 – Damon 2011-03-29 23:23:52