2009-12-01 5 views
0

A, B, C의 세 클래스가 있습니다. class A가 이벤트를 전달하고 B 클래스가이를 처리 한 다음 C를 전달합니다. 그러나 B의 dispatchEvent 함수에서이 이상한 유형 캐스팅 오류가 발생했습니다.dispatchEvent의 형 변환 오류

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

이 사람이 나를 도와 드릴까요 : 나는 다음에 그것을 변경하는 경우

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

, 그럼 나는 어떤 오류가 발생하지 않는 다음과 같이있는 것 같습니다? 고맙습니다.

+0

A에서 이벤트를 전달하는 코드와 B의 이벤트 수신기가 이벤트 흐름에 추가되는 방식을 보지 않고도 전체 그림을보기가 어렵습니다. 이 경우에는 관련성이 높기 때문에 실제 오류를 제공해주십시오. –

답변

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

이벤트를 복제해야합니다. 일단 그들이 파견되면 그들은 복제되지 않으면 다시 파견 될 수 없다. 왜 이것이 무한 루프에 들어가는 핸들러와 관련이 있는지 확실하지 않습니다.

너무 복잡하기 때문에 사용자 정의 이벤트의 경우 복제 방법을 구현해야합니다. 이 모든 작업은 유형의 새 이벤트를 반환하고 상태/변수를 복사하는 것입니다.