as3事件消息中心

 在As2.0時代,我習慣於利用一個自定義的全局事件管理器來管理所有的事件.這樣的好處是便於後 期代碼結構維護.說白了也就是偷懶...但是無論如何,我很喜歡這種方法,所以在as3裏,我比較執拗的 想實現這個全局事件管理器.
如果說按照As2.0的思路,大致可以把事件分爲三種,按鈕事件等公共事件,組件架構的事件及自定義事件.前兩者可都歸於系統事件,而我需要的管理器便是用來管理自定義事件的.於是就有了EventCenter這麼個消息中心的公用類
代碼如下:
/*@
Author:frank
Site:www.2solo.cn
Date:2008.01.14
Info:靜態消息中心
*/
package nt.utils{
 import flash.events.EventDispatcher;
 import flash.events.Event;
 public class EventCenter extends EventDispatcher {
  public static  var EventHandler=new EventDispatcher();
  private static  var listeners:Array;
  /*
  *主構造方法
  */
  public function EventCenter() {
  }
  /*
  *事件註冊
  */
  public static function addMyEventListener(...args) {
   trace(args.length)
   EventHandler.addEventListener(args[0],args[1],args[2],args[3],args [4]);
  }
  /*
  *事件派發
  */
  public static function dispatchMyEvent(type:Object) {
   EventHandler.dispatchEvent(new EnhancedEvent(type.evt,type.asd));
  }
  /*
  *事件註銷
  */
  public static function removeMyEventListener(...args) {
   EventHandler.removeEventListener(args[0],args[1],args[2]);
  }
 }
}
/*
*加強Event
*/
import flash.events.*;
class EnhancedEvent extends Event {
 protected var argObj:Object;
 /*
 *類構造方法
 */
 public function EnhancedEvent(type:String, argObj:Object, bubbles:Boolean = false, cancelable:Boolean = false) {
  super(type, bubbles, cancelable);
  //argObj爲所填加的一個屬 性,用於傳遞參數
  this.argObj= argObj;
 }
 /*
 *返回附帶的一個參數對象
 */
 public function get eventArg ():Object {
  return this.argObj;
 }
 /*
 * 重載Event的toString方法
 */
 public override function toString ():String {
  return formatToString ("Event:","type","bubbles","cancelable","eve ntArg");
 }
}這裏用到的EnhancedEvent類是一個Event類的增強.我在
[url=http://www.blueidea.com/]Blueidea[/url]
上參考了幾位朋友的方法後最終選擇用這個方法來做 爲給事件傳遞中帶有參數的功能的加強手段。
方法說明:
public class EventCenter
    public static function addMyEventListener(...args) //事件註冊
    public static function dispatchMyEvent(type:Object) //事件廣播,該方法利用一個參數來接受事件和對象,所以需要同一參數對象名,比如這裏的asd.可以通過...(rest)進行改造,下次更新了版本會繼續發在我的blog上.
    public static function removeMyEventListener(...args) //事件刪除
class EnhancedEvent
    eventArg //EnhancedEvent繼承Event且擁有eventArg屬性來傳遞一個參數對 象.
我在各大ria論壇上也看到另一種方法,類似As2中的Delegate.那個方法其實也不錯,不過擴展Event的方法是As3官方推薦的方法,故選擇這個方法。該事件消息中心目前只是一個雛形,歡迎大家進行補充和優化.
附上
[url=http://www.2solo.cn/upload/eventCenter_2soloDOTcn.zip]源文件[/url]
,內含我製作的一個應用實例.
本文轉自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/2006.html
發佈了19 篇原創文章 · 獲贊 0 · 訪問量 2074
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章