2012-05-17 46 views
1

我想發送一個事件2次:Multiple dispatchHandler Actionscript 3

我有一個MainClass,一個SecondClass和一個ThirdClass。

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

我抓住,並把它在二等:

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:

object.addEventListener(SecondClass.CLICKED_HANDLER, clickedEventListener); 

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

但它不會工作......我做錯了什麼? 我怎樣才能獲得有關被點擊的ThirdClass對象的信息? (Normaly 1個dispatchEvent,它與:

var thirdClassObject:ThirdClass = e.currentTarget as ThirdClass; 
在clickHandler方法

,但如何與2個dispatchEvents做到這一點?)

所以我想在我的MainClass知道哪個三級欄目,目的是點擊。

非常感謝!

回答

2

當你發送一個事件時,target屬性引用調度。
你顯然需要傳遞一個對第三類的引用以及在主類的事件處理函數中使用的事件。

你有幾個選擇來實現這一點。

  1. 如果一個調度程序實例顯示列表上,使用event bubbling來處理父顯示對象的事件。請參閱Event構造函數的second argumentEvent.bubbles屬性。這樣,您可以訂閱父項中任何子對象的事件,並在您的事件處理程序中檢查Event.target屬性。大多數鼠標事件如MouseEvent.CLICK都默認冒泡。所以你可以聽他們,並檢查主類的目標。

    // 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 }
    如果您仍想使用CLICKED_HANDLER事件,您可以這樣做:
    // 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);