2009-12-01 82 views
0

我有三個類:A,B,C,A類調度一個事件,B類將處理這個然後調度​​C.但是,我在B的dispatchEvent函數中得到了這個奇怪的類型轉換錯誤,它看起來像如下:在dispatchEvent中輸入了轉換錯誤

public function handler(event:SomeEvent):void { 
     removeEventListeners(); 
     dispatchEvent(event); 
} 

如果我將其更改爲以下內容,然後我沒有得到任何錯誤:

public function handler(event:SomeEvent):void { 
     removeEventListeners(); 
     var newEvent:SomeEvent = event.clone(); //create a clone of itself 
     dispatchEvent(newEvent); 
} 

誰能幫助我在這?謝謝。

+0

如果沒有看到A中分派事件的代碼以及B事件監聽器如何添加到事件流中,則很難看到整個圖片。另外,請提供您獲得的實際錯誤,因爲這些錯誤與此情況高度相關。 – 2009-12-01 00:23:16

回答

4

您是否在使用自定義事件?如果你是,那麼你需要定義克隆方法。當您「重新分派」事件時,閃存會自動克隆事件並分派克隆。這就是爲什麼當你將你的代碼改變爲event.clone()時它可以工作。所以,簡而言之,你的第二個實施是正確的。

如果您不想編寫額外的代碼,您應該實現克隆方法。 EventDispatcher.dispatchEvent()的文檔解釋了這一點:http://help.adobe.com/en_US/AS3LCR/Flash_10.0/

0

您可以這樣做。

public function handler(event:SomeEvent):void { 
    removeEventListeners(); 
    dispatchEvent(event.clone); 
} 

您需要克隆該事件。一旦派發,除非克隆,否則不能重新派遣。我不知道這是爲什麼,也許是處理程序進入無限循環。

由於嚴重介入,你應該對你的事件實現一個克隆方法,如果它是自定義的。所有這些都需要返回一個新類型的事件,複製任何狀態/變量。