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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章