1. 程式人生 > >egret 不同類之間相互呼叫以及事件偵聽

egret 不同類之間相互呼叫以及事件偵聽

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));
    }
}