this.selectBtn.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onClickNewIndo.bind(this,this.data), this);//添加監聽事件 public onClickNewIndo(data,evt:egret.TouchEvent) { this.selectBtn.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.onClickNewIndo.bind(this,this.data), this);//移除監聽事件 }
在egret中,我們添加帶參數的監聽事件,首先想到的是用bind綁定,但是bind會返回一個新函數(匿名的),這樣會造成移除監聽事件的時候不能移除。
現在的辦法是,我們可以用一個參數來保存這個匿名函數,在需要的移除的地方移除這個參數就可以了。實際做法如下:
private fun:any;//聲明一個參數 this.fun=this.onClickNewIndo.bind(this,1);//將監聽事件函數保存 this.selectBtn.addEventListener(egret.TouchEvent.TOUCH_TAP, this.fun, this);//添加監聽方法 public onClickNewIndo(data,evt:egret.TouchEvent) { this.selectBtn.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.fun, this);//移除監聽事件 }
這樣,你就能順利移除帶參數的監聽事件了。