AS3 自定义事件

结构:

1.自定义事件(Event类或其子类实例)

2.事件发送者(必须EventDispatcher类或其子类实例)

3.事件监听器(接收事件后执行特定处理代码)

监听事件:

1.建立监听器,监听器可为独立的函数或某对象的方法

2.注册监听,使用事件发送者的addEventListener()注册自定义事件(Event类或其子类实例),事件监听器(接收事件后执行特定处理代码)

事件监听器:

必须是函数,必须只有一个参数(必须是Event类或子类实例),返回值必须为空。

function listenerName(evt:Event):void{...}

  1. //定义点菜事件  
  2. package lu.huang.event{  
  3.     import flash.events.Event;  
  4.       
  5.     //继承Event类  
  6.     public class OrderEvent extends Event{  
  7.         //自定义事件类型  
  8.         public static const ORDER_DISHES:String = "点菜";  
  9.         //自定义事件包含参数(此处为菜单)  
  10.         private var _dishes:Array;  
  11.           
  12.         //构造函数  
  13.         public function OrderEvent(){  
  14.             //调用父类构造函数初始化对象  
  15.             super(ORDER_DISHES);  
  16.         }  
  17.           
  18.         //getter,setter设置菜单值  
  19.         public function get dishes():Array{  
  20.             return _dishes;  
  21.         }  
  22.         public function set dishes(dishesAry:Array):void{  
  23.             _dishes = dishesAry;  
  24.         }  
  25.           
  26.         //重写父类toString方法,输出类的属性  
  27.         override public function toString():String{  
  28.             return formatToString("OrderEvent""type""bubbles""cancelable""eventPhase""dishes");  
  29.         }  
  30.           
  31.         //重写父类clone实现自定义事件的复制  
  32.         override public function clone():Event{  
  33.             var tmpEvt:OrderEvent = new OrderEvent();  
  34.             tmpEvt._dishes = _dishes;  
  35.               
  36.             return tmpEvt;  
  37.         }  
  38.     }  
  39. }  
  1. //顾客类(事件发送者)  
  2. package lu.huang{  
  3.     import flash.events.EventDispatcher;  
  4.     //包含自定义点菜事件类  
  5.     import lu.huang.event.OrderEvent;  
  6.       
  7.     //继承EventDispatcher类  
  8.     public class Customer extends EventDispatcher{  
  9.         //顾客的名称  
  10.         public var name:String;  
  11.           
  12.         //构造函数  
  13.         public function Customer(nS:String){  
  14.             name = nS;  
  15.         }  
  16.           
  17.         //顾客点菜  
  18.         public function order():void{  
  19.             //实例化点菜事件  
  20.             var orderDish:OrderEvent = new OrderEvent();  
  21.             //点菜放入点菜事件  
  22.             orderDish.dishes = [//'剁椒鱼头','农家小炒肉'];  
  23.               
  24.             //发送点菜事件  
  25.             dispatchEvent(orderDish);  
  26.         }  
  27.     }  
  28. }  
  1. //服务员类(事件监听器)  
  2. package lu.huang{  
  3.     //包含自定义点菜事件类  
  4.     import lu.huang.event.OrderEvent;  
  5.       
  6.     public class Waiter{  
  7.         //顾客发出点菜事件后服务员响应事件处理  
  8.         public function replyOrderFood(evt:OrderEvent):void{  
  9.             trace("你好," + evt.target.name + "!你点的菜是:\r" + evt.dishes);  
  10.             trace("我马上吩咐厨房去做!");  
  11.         }  
  12.     }  
  13. }  

调用:

  1. //实例化一个顾客对象  
  2. var lulu:Customer = new Customer("lulu");  
  3. //实例化一个服务员对象  
  4. var waiter:Waiter = new Waiter();  
  5.               
  6. //为lulu添加一事件监听(事件类型,监听器(处理方法))  
  7. lulu.addEventListener(OrderEvent.ORDER_DISHES,waiter.replyOrderFood);  
  8. //触发点菜事件,完成点菜  
  9. lulu.order();  
  10.               
  11. //移除监听  
  12. lulu.removeEventListener(OrderEvent.ORDER_DISHES,waiter.replyOrderFood); 
posted @ 2011-06-15 14:43  rob_2010  阅读(253)  评论(0编辑  收藏  举报