结构:
1.自定义事件(Event类或其子类实例)
2.事件发送者(必须EventDispatcher类或其子类实例)
3.事件监听器(接收事件后执行特定处理代码)
监听事件:
1.建立监听器,监听器可为独立的函数或某对象的方法
2.注册监听,使用事件发送者的addEventListener()注册自定义事件(Event类或其子类实例),事件监听器(接收事件后执行特定处理代码)
事件监听器:
必须是函数,必须只有一个参数(必须是Event类或子类实例),返回值必须为空。
function listenerName(evt:Event):void{...}
//定义点菜事件 package lu.huang.event{ import flash.events.Event; //继承Event类 public class OrderEvent extends Event{ //自定义事件类型 public static const ORDER_DISHES:String = "点菜"; //自定义事件包含参数(此处为菜单) private var _dishes:Array; //构造函数 public function OrderEvent(){ //调用父类构造函数初始化对象 super(ORDER_DISHES); } //getter,setter设置菜单值 public function get dishes():Array{ return _dishes; } public function set dishes(dishesAry:Array):void{ _dishes = dishesAry; } //重写父类toString方法,输出类的属性 override public function toString():String{ return formatToString("OrderEvent", "type", "bubbles", "cancelable", "eventPhase", "dishes"); } //重写父类clone实现自定义事件的复制 override public function clone():Event{ var tmpEvt:OrderEvent = new OrderEvent(); tmpEvt._dishes = _dishes; return tmpEvt; } } }
//顾客类(事件发送者) package lu.huang{ import flash.events.EventDispatcher; //包含自定义点菜事件类 import lu.huang.event.OrderEvent; //继承EventDispatcher类 public class Customer extends EventDispatcher{ //顾客的名称 public var name:String; //构造函数 public function Customer(nS:String){ name = nS; } //顾客点菜 public function order():void{ //实例化点菜事件 var orderDish:OrderEvent = new OrderEvent(); //点菜放入点菜事件 orderDish.dishes = [//'剁椒鱼头','农家小炒肉']; //发送点菜事件 dispatchEvent(orderDish); } } }
//服务员类(事件监听器) package lu.huang{ //包含自定义点菜事件类 import lu.huang.event.OrderEvent; public class Waiter{ //顾客发出点菜事件后服务员响应事件处理 public function replyOrderFood(evt:OrderEvent):void{ trace("你好," + evt.target.name + "!你点的菜是:/r" + evt.dishes); trace("我马上吩咐厨房去做!"); } } }
调用:
//实例化一个顾客对象 var lulu:Customer = new Customer("lulu"); //实例化一个服务员对象 var waiter:Waiter = new Waiter(); //为lulu添加一事件监听(事件类型,监听器(处理方法)) lulu.addEventListener(OrderEvent.ORDER_DISHES,waiter.replyOrderFood); //触发点菜事件,完成点菜 lulu.order(); //移除监听 lulu.removeEventListener(OrderEvent.ORDER_DISHES,waiter.replyOrderFood);