2012-05-17 5 views
1

나는 이벤트 2 회를 ​​파견합니다.여러 dispatchHandler 액션 스크립트 3

ThirdClass에는 clickEvent가 있습니다.

this.addEventListener(MouseEvent.CLICK, clickHandler); 


    public static const CLICKED_HANDLER:String = "clickedHandler"; 

    public function clickHandler(e:MouseEvent):void { 
     dispatchEvent(new Event(CLICKED_HANDLER)); 
    } 

내가 잡을과 SecondClass에 던져 :

object.addEventListener(ThirdClass.CLICKED_Handler, clickedEventListener); 


    public static const CLICKED_HANDLER:String = "clickedHandler"; 

    public function clickedEventListener(e:Event):void { 
     dispatchEvent(new Event(CLICKED_HANDLER)); 
    } 

을 그리고 이것은 내가 MainClass에서 잡아 : 나는 SecondClass에 파견

object.addEventListener(SecondClass.CLICKED_HANDLER, clickedEventListener); 

    public function clickedEventListener(e:Event):void { 
     trace("click"); 
    } 

그러나 않을 것 일 ... 내가 뭘 잘못하고 있니? 클릭 한 ThirdClass의 개체에 대한 정보를 어떻게 얻을 수 있습니까? 그래서

: 나는 ThirdClass가 객체 인 내 MainClass 알고 싶어 : 합니다 (는 clickHandler 방법에

var thirdClassObject:ThirdClass = e.currentTarget as ThirdClass; 

하지만 2 dispatchEvents으로이 작업을 수행하는 방법을? Normaly 하나 개는, dispatchEvent로, 그것은과의) 클릭 함.

고맙습니다.

답변

2

당신이 이벤트를 전달하면, target 속성은 디스패처를 참조합니다.
분명히 필요한 것은 주 클래스의 이벤트 처리기에서 사용할 이벤트와 함께 세 번째 클래스에 대한 참조를 전달하는 것입니다.

당신은 이것을 달성하기위한 몇 가지 옵션이 있습니다. 디스패처 인스턴스가 표시 목록에있는 경우

  1. , 부모 표시 객체의 이벤트를 처리 할 event bubbling를 사용합니다. Event 생성자와 Event.bubbles 속성의 second argument을 참조하십시오. 이 방법을 사용하면 부모의 자식 객체 이벤트에 가입 할 수 있으며 이벤트 처리기에서 Event.target 속성을 확인할 수 있습니다. MouseEvent.CLICK과 같은 대부분의 마우스 이벤트는 기본적으로 버블 링됩니다. 그래서 당신은 그걸 듣고 메인 클래스의 목표물을 점검 할 수 있습니다. 당신은 여전히 ​​CLICKED_HANDLER 이벤트를 사용하려면 다음과 같이

    // inside MainClass 
    // notice: we are subscribing to MainClass instance 
    this.addEventListener(MouseEvent.CLICK, clickedEventListener);
    public function clickedEventListener(e:MouseEvent):void { trace(e.target); // the target is what was actually clicked // you may also notice the difference between e.target and e.currentTarget }
    , 당신은 그렇게 할 수 있습니다
    // inside ThirdClass 
    dispatchEvent(new Event(CLICKED_HANDLER, true)); 
    // ---------------------------------------^
    는 기억이 만 표시 목록의 구성원에 대해 작동합니다.
    Event flow article on adobe.com을 참조하십시오.

  2. custom event class을 만들고 거기에 참조하십시오. (또한 맞춤 이벤트 클래스로 이벤트 버블 링을 사용할 수도 있습니다.) 이렇게하면 이벤트를

    // inside SecondClass 
    public function clickedEventListener(e:Event):void { 
        var customEvent:CustomEventClass = new CustomEventClass(CLICKED_HANDLER); 
        customEvent.customTarget = e.target; 
        dispatchEvent(customEvent); 
    }
    // inside MainClass public function clickedEventListener(e:CustomEventClass):void { trace(e.customTarget); }

0

먼저 "작동하지 않을 것입니다 ..."라는 것이 무엇을 의미합니까?

SecondClass에서 이벤트를 수신합니까? 그렇다면, 당신은 이것을 시도 할 수 있습니다 :

//SecondClass 
public function clickedEventListener(e:Event):void { 
    dispatchEvent(e); 
} 

//MainClass 
object.addEventListener(ThirdClass.CLICKED_HANDLER, clickedEventListener);