結構:
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);