1

다른 이벤트 디스패치 이벤트를 검색했으며 그 중 아무도 나를 도와주지 않았습니다.AS3 디스패치 이벤트가 작동하지 않습니다.

여기까지 제가 지금까지 있습니다. 이벤트 리스너가 성공적으로 추가되었음을 알고 있지만 이벤트는 전달되지 않습니다. .mxml 파일에서

: 별도의 .as 파일에서

function foo():void { 

    var eventClassObj:MyEventClass = new MyEventClass(); 


} 

는 :

public class MyEventClass extends EventDispatcher 
{ 

    public function MyEventClass(target:flash.events.IEventDispatcher = null) 
    { 

        //ADD EVENT LISTENER 
     this.addEventListener("test", testFunc, true); 



        //DEBUGGING PRINT STATEMENTS 
     var str:String; 
     if (this.hasEventListener("test")) { 
       str = "EVENT LISTENER ADDED"; 
     } else { 
       str = "NO LISTENER"; 
     } 

     ExternalInterface.call("console.log", str); 

        //DISPATCH EVENT 
     this.dispatchEvent(new Event("test", true)); 
    } 


    //THIS MUST EXECUTE WHEN EVENT DISPATCHED 
    private function testFunc(e:Event):void { 
     ExternalInterface.call("console.log", "dispatch event successful"); 
    } 
} 

나는, 액션 완전히 새로운입니다. 그 사건이 왜 결코 파견되지 않는지 아십니까? 이를 실행하기위한 콘솔 내 출력은 다음과 같습니다

EVENT LISTENER ADDED 

내 예상 출력되는 동안이 작동하지 않을 이유가 표시되지 않습니다

EVENT LISTENER ADDED 
dispatch event successful 

.

+0

시간이 지났지 만 이벤트 리스너가 트리거되지 않은 것으로 추측하고 있습니다. 이벤트를 전달하는 것은 플래시 표시 목록에 없습니다. MXML 객체는 정의에 따라 이벤트 디스패처입니다. 따라서 별도의 'EventDispatcher'가 필요하지 않습니다. MXML 클래스에서 직접 "테스트"를 청취하고 디스패치 할 수 있습니다. 정말로 다른 클래스가 이벤트를 수신하게하려면,이를 디스플레이리스트에 추가해야합니다 ('UIComponent'또는 'Sprite'를 사용할 수있는 특별한주의). –

답변

2

문제는 이벤트 수신기를 추가하는 방식에서 비롯됩니다. useCapturetrue으로 설정하면 청취자가 버블 링 이벤트에 반응하지 않습니다.

당신이 행 다음 변경하는 경우

:

this.addEventListener("test", testFunc, true); 

에 :

this.addEventListener("test", testFunc); 

이벤트는 귀하의 testFunc에 의해 처리됩니다.