egret 不同類之間相互呼叫以及事件偵聽
阿新 • • 發佈:2018-11-26
Main類
class Main extends eui.Component { public constructor() { super(); } public childrenCreated() { super.childrenCreated(); this.callEvent(); } //呼叫ScreenEvent類的函式 private callEvent() { //呼叫ScreenEvent下的screen_1函式,不新增事件偵聽 ScreenEvent.getInstance().screen_1(); //呼叫ScreenEvent下的screen_2函式(通過註冊"SCREEN_COMPLETE"監聽),新增事件偵聽 let a:ScreenEvent = new ScreenEvent(); a.addEventListener("SCREEN_COMPLETE",this.screenComplete,this); a.screen_2(); //a.addEventListener 和 a.screen_2(); 一定不要寫反,否則監聽不到 } private screenComplete(evt:ScreenEvent){ //通過evt['data']來提取監聽事件傳來的值 console.log(evt['data']); } }
ScreenEvent類
class ScreenEvent extends egret.EventDispatcher{ //單例,通過此可不宣告類,直接呼叫(呼叫1)ScreenEvent.getInstance().screen_1(); private static instance:ScreenEvent; public static getInstance():ScreenEvent{ if(this.instance == null){ this.instance = new ScreenEvent(); } return this.instance; } public screen_1(){ console.log('呼叫方式-1'); } //第2種呼叫方式,通過寫的"SCREEN_COMPLETE"在main中監聽次函式的執行 public screen_2(){ let dataArr:any = {}; for(let i=0;i<10;i++){ dataArr[i] = i+7; } this.dispatchEvent(new egret.Event("SCREEN_COMPLETE", false, false, dataArr)); } }