如果說按照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