0

创建 CustomEvent 时出现一些奇怪的错误,似乎正在扩展的事件无法访问事件属性:

package 
{
    import flash.events.Event;
    public class CustomEvent extends Event
    {

        //public static const COMPLETE:String = 'complete';

        private var _assetName:String;
        public function get assetName ():String
        {
            return _assetName;
        }
        public function set assetName ( aname:String ):void
        {
            _assetName = aname;
        }

        public function CustomEvent (type:String, bubbles:Boolean = false, cancelable:Boolean = false)
        {
            super (type, bubbles, cancelable);
        }

        public override function clone ():Event
        {
            return new CustomEvent(type, bubbles, cancelable) as Event;
        }
    }
}

做的时候:

myObj.addEventListener(CustomEvent.COMPLETE, objLoaded);

我收到 COMPLETE 不存在的错误...好的,我将其设置到该位置,然后它抱怨无法将 CustomEvent 转换为 Event。

我在这里想念什么?

4

3 回答 3

1

您需要将其声明public static const COMPLETE:String = 'complete';为静态 var/const 不会转移到扩展类。

将 CustomEvent 转换为 Event 的错误可能是由于将事件侦听器设置为侦听Eventnot引起的CustomEvent

于 2012-06-07T11:56:57.123 回答
0

我们有几个问题需要在这里讨论:

  1. 你有你的public static const COMPLETE......注释掉了。为什么?如果您想将其CustomEvent.COMPLETE称为事件类型,则需要这样做。

  2. 使用我的通灵第三只眼,你的事件监听器声明如下:

    public completeListener(evt:Event):void
    ...
    

    这不会按照你想要的方式工作。你需要

    public completeListener(evt:CompleteEvent):Void
    ...
    
  3. 与编译问题无关,您的自定义事件还有另一个问题。您的克隆方法不会克隆该assetName属性。尝试这样的事情:

    public override function clone():Event
    {
        var ret:CustomEvent = new CustomEvent(type, bubbles, cancelable);
        ret.assetName = assetName;
        return ret;
    }
    
于 2012-06-07T19:05:40.040 回答
0

事件在哪里分派,侦听器的签名是什么样的?

于 2012-06-07T11:18:28.480 回答