在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类的增强.我在
Blueidea
上参考了几位朋友的方法后最终选择用这个方法来做 为给事件传递中带有参数的功能的加强手段。
方法说明:
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官方推荐的方法,故选择这个方法。该事件消息中心目前只是一个雏形,欢迎大家进行补充和优化.
附上
源文件
,内含我制作的一个应用实例.
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/2006.html