EventDispatcher的使用
在我們使用V2 的Component的時候,應該很多人都有用過addEventListener這個指令吧,而其實在我們製作我們自己的class的時候也可以利用他來廣播我們的事件訊息,下面是一個我們簡單的class:
我們建立一個Msg的Class class Msg { //要使用EventDispatcher需宣告這三個函數 //因為如此才能讓其他程式去新增或刪除此監聽器 private var dispatchEvent:Function; public var addEventListener:Function; public var removeEventListener:Function; //在建構子部分初始化我們的EventDispatcher public function Msg() { mx.events.EventDispatcher.initialize(this); } //我們隨意做一個類別Event //當呼叫此Evnet會順便廣播我們的message事件 public function sendMsg(_msg:String):Void { //定義我們的要廣播的物件和事件名稱 var eventObj:Object={target:this,type:"message"} eventObj.msg=_msg; dispatchEvent(eventObj); } } 在我們的Fla裡面,建立我們的Msg物件 var msg1:Msg=new Msg(); //這邊的語法就類似我們寫組件的監聽器方式 msgObj=new Object(); msgObj.message=function(eventObj) { trace(eventObj.msg); } msg1.addEventListener("message",msgObj); //呼叫msg1的sendMsg事件,此時該事件就會同時廣播訊息 //進而呼叫我們的msgObj msg1.sendMsg("hello"); 接下來我們介紹另外一個方法接收廣播訊息 var msg1:Msg=new Msg(); msgObj=new Object(); //在這裡我們使用handleEvent函數 msgObj.handleEvent=function(eventObj) { trace("obj:"+eventObj.target+" type:"+eventObj.type); } msg1.addEventListener("message",msgObj); msg1.sendMsg("hello");
你會發現,我們藉由handleEvent的方式可以擷取我們所有的廣播訊息, 這在我們要用eventDispatcher是很有利的,在 mesh的EventProxy就是用這方式處理,除此之外, darron schall也整理出目前三種使用EventDispatcher方式的優缺點,我們上面使用的就是他敘述的第二種方式,大家可以好好去觀看比較囉....
除此之外,Peter Hall也實作了一個歸納整理出來的EvenDispatcher的使用方式,請參考這裡
posted on 2005-01-01 20:48 HelloSnoopy 阅读(611) 评论(0) 收藏 举报
浙公网安备 33010602011771号