2012-11-06 15 views
0

我試圖編寫事件監聽器,它可以通過事件或手動調用。在通過事件調用的情況下,我們必須刪除事件監聽器。在其他情況下 - 只需要做點什麼。我使用(... args)構造來確定參數的數量。但是,當由Event調用函數時,看起來類型的參數已更改爲Object,所以我無法獲取args.target和args.type字段。但是當我使用(參數:事件)一切都很好。函數參數中的事件或沒有任何內容。如何?

private function smartErrListener(... args) { 
    // when function called by event 
    // args.length == 1 
    // args instanceof Event == false 
    // args is Event == false 
    // typeof(args) == 'object' 

    if (args.length == 1 && args instanceof Event) { 
     args.target.removeEventListener(Event.COMPLETE, OkListener); 
     args.target.removeEventListener(IOErrorEvent.IO_ERROR, smartErrListener); 
    } 

    trace("We've got an errors!"); 
} 

任何想法?

PS:ofcourse有可能做這樣的事情

private function smartErrListener(e:Event) { 
    e.target.removeEventListener(Event.COMPLETE, OkListener); 
    e.target.removeEventListener(IOErrorEvent.IO_ERROR, smartErrListener); 

    this.errCallback(); 
} 

private function errCallback() { 
    trace("We've got an errors!"); 
} 

但它多了一個功能...

回答

3

我做這樣的事情:

protected functiom onStageResize(e:Event = null):void 
{} 

然後我可以使用它與事件聽衆和孤獨:

onStageResize(); 

例如在觸發事件之前強制執行,

如果您希望通過事件偵聽器調用相同的方法並手動使用不同的參數,而不是確保參數是事件,您可以使用自定義事件來包裝自定義參數,那麼您可以測試:

if(e is MyCustomEvent) 
{ 
    //called manually 
} 

但並沒有什麼不對的第二種方法的做法:)

問候

+0

看起來棘手,但它的工作原理:)非常感謝! – Arkady

+0

我同意,但正如我所說的「第二種方法(你的)方法沒有錯誤:)。 –

相關問題