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类的增强.我在
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