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属性将引用调度程序。
您显然需要的是传递对第三类的引用以及要在主类的事件处理程序中使用的事件。

您有多种选择来实现这一目标。

  1. 如果调度程序实例在显示列表中,则使用事件冒泡处理父显示对象中的事件。参考构造函数的第二个参数EventEvent.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));
    // ---------------------------------------^
    请记住:这仅适用于显示列表成员。
    请参阅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 回答