如何在ActionScript 3中处理自定义事件?

时间:2010-10-28 05:54:50

标签: actionscript-3

我已经创建了一个事件处理程序/侦听器,如下所示:

import flash.events.Event;

public class DanielEvent extends Event {

    public var data:*;
    public static const APP_STARTED:String = "APP_STARTED";

    public function DanielEvent(n:String, data:*){
        this.data = data;
        super(n)
    }
}

使用以下方式收听活动:

addEventListener(DanielEvent.APP_STARTED, appStarted);

通过以下方式调度事件:

dispatchEvent(new DanielEvent("APP_STARTED", "test"))

通过以下方式接收数据:

private function appStarted(e:Event){
    trace(e.data)
}

但我收到错误:

  

访问可能未定义的属性   数据通过静态引用   键入flash.events:Event。

2 个答案:

答案 0 :(得分:2)

如果要访问data属性,则必须在事件处理程序中使用自定义事件类型:

private function appStarted(e:DanielEvent): void { 
    trace(e.data);
}

答案 1 :(得分:1)

您的事件处理程序是传递给DanielEvent,而不是事件:

private function appStarted(e:DanielEvent):void
    {
    trace(e.data);
    }

也。你也应该使用你的常量来代替传递一个字符串,就像你为你的听众所做的那样:

dispatchEvent(new DanielEvent(DanielEvent.APP_STARTED, "test"));

如果您计划多次调度该事件,请不要忘记覆盖clone()。

public override function clone():Event
     {
     return new DanielEvent(n, data);
     }