1

イベントを 2 回ディスパッチしたい:

MainClass、SecondClass、ThirdClass があります。

ThirdClass には clickEvent があります。これを SecondClass にディスパッチします。

    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 でキャッチします。

    object.addEventListener(SecondClass.CLICKED_HANDLER, clickedEventListener);

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

しかし、それはうまくいきません...何が間違っていますか? また、クリックされた ThirdClass のオブジェクトに関する情報を取得するにはどうすればよいでしょうか? (通常は 1 つの dispatchEvent で、次のようになります。

    var thirdClassObject:ThirdClass = e.currentTarget as ThirdClass;

clickHandler メソッドで、しかし 2 つの dispatchEvents でこれを行うにはどうすればよいですか?)

だから:私のMainClassで、どのThirdClassオブジェクトがクリックされたか知りたいです。

どうもありがとう!

4

2 に答える 2

2

イベントをディスパッチすると、targetプロパティはディスパッチャを参照します。
どうやら必要なのは、メイン クラスのイベント ハンドラで使用するイベントとともに、3 番目のクラスへの参照を渡すことです。

これを実現するには、いくつかのオプションがあります。

  1. ディスパッチャ インスタンスが表示リストにある場合は、イベント バブリングを使用して、親表示オブジェクトのイベントを処理します。コンストラクタの第二引数Event.bubblesプロパティを参照してください。このようにして、親の子オブジェクトのイベントをサブスクライブし、イベント ハンドラーでプロパティを確認できます。のようなマウスイベントのほとんどは、デフォルトでバブリングしています。したがって、それらを聞いて、メインクラスでターゲットを確認できます。EventEvent.targetMouseEvent.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));
    // ---------------------------------------^
    覚えておいてください: これは表示リストのメンバーに対してのみ機能します。adobe.com のイベント フローに関する記事を
    参照してください。

  2. カスタム イベント クラスを作成し、そこに参照を配置します。(また、カスタム イベント クラスでイベント バブリングを使用することもできます。) このようにして、イベントを次のようにディスパッチします。

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

于 2012-05-17T11:19:18.997 に答える
0

まず、「うまくいかない...」とはどういう意味ですか?

SecondClass はイベントをまったく受け取りますか? もしそうなら、これを試すことができます:

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

//MainClass
object.addEventListener(ThirdClass.CLICKED_HANDLER, clickedEventListener);
于 2012-05-17T11:16:29.890 に答える