AS3 自定义事件
结构:
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);