2012-03-08 145 views
0

快速問題...是否可以將EventListener附加到函數中?這樣,如果在某個函數的執行過程中任何一個事件被分派,EventHandler將被解僱?添加EventListener功能?

乾杯。

回答

2

事件偵聽器附加到屬於從EventDispatcher後繼的類的對象。你不能將它們附加到一個函數中。

stage.addEventListener("myFunctionWasCalled", callback); 
myFunction(); 

public function callback(event:Event):void { 
    trace("callback executed"); 
} 

public function myFunction():void { 
    stage.dispatchEvent(new Event("myFunctionWasCalled")); 
} 
0

您可以通過傳遞函數引用(回調)作爲參數

function cb(s:String):void { 
    trace(s); 
} 

function doit(f:Function):void { 
    // do something 
    f("Hi"); 
    // do some more stuff 
} 

doit(cb); 
3

可以使用舞臺調度此類事件,並聽取其實現這一目標您只想在函數調用的生命週期中監聽事件,只需根據需要添加/刪除。 例如:

function somefunction():void{ 
    someobject.addEventListener(Event, eventhandler); 
    ... doing stuff 
    someobject.removeEventListener(Event, eventhandler); 
} 

現在記住,如果你這樣做,那麼你的選擇,即使流可能會變得非常難以跟蹤的道路。

典型性,你只需要在對象的生命和死亡以及函數調用的生死中擔心這一點。

0

如果:

0

要將事件偵聽器附加到對象,此對象必須實現IEventDispatcher接口。所以你可以擴展Function類並添加你的方法。 AS3文檔說Function不是終點,而是AS3編譯它不同意:VerifyError: Error #1103: Class Bla cannot extend final base class.

所以,簡單的答案是:你不能將一個事件偵聽器的功能

但是,因爲它已經提到你可以:

  1. 通行證的回調/回調將在某個時候被調用的函數:function bla(callback1:Function, callback2:Function):void
  2. 在功能執行過程中發送來自某個其他對象的事件,例如,您可以製作一個Functor類,該類具有方法​​並實現IEventDispatcher。通過這種方式,你可以調用函數myFunctor.execute()並且可以獲得派發的事件。