Event, EventDispatcher, Listener

這三者的關係,可以用一個情境來解釋:
總機先生,電話機,通話內容。

總機先生是 Listener
電話是 EventDispatcher
通話內容是 Event

通話內容必須透過電話傳達出去,出去之後就由總機先生立刻接聽;此外,一通電話內容可以讓無限個總機接聽(想像把電話機設定成擴音模式)。這個模式的作用在於,讓總機先生在『適當的時間』,做『適當的事』,比如說,一接到找老闆的電話,就要先問:『您是哪位?』此時『一接到電話』就是Event 透過EventDispatcher 發出來了,又正好總機監聽著電話狀態,所以總機立刻根據電話內容(event),做了特定的事情(問:您是哪位?)。再舉個例子,像是接到愛慕的A氏,就回答:『哈囉你好嗎?』 這兩種回達都是一個Listener ,根據不同的事件,定義不同的listener。

Listener 在 AS3.0 的世界,規定要寫成:

function functionName( event:Event ):void

要監聽某個電話就要寫成:
myPhone.addEventListener( eventType , myListener );
其中eventType是個字串,代表事件的類別(老闆打的還是同事打的),myListener 就是呼應的動作。要特別強調的是,在AS的世界裡,當一個Event被dispatch出來之後,對應的listener幾乎『沒有時差』就發動,因此我們常遇到UIComponent繪製畫面不如預期,這時可在listener之中利用 callLater 來針對UIComponent操作,利用callLater的延遲是比較正統的作法。

Leave a Reply