【问题标题】:AS3 CustomEvent not being extended at all?AS3 CustomEvent 根本没有被扩展?
【发布时间】:2012-06-07 11:15:06
【问题描述】:

我在创建 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。

我在这里错过了什么??

【问题讨论】:

  • COMPLETE 不存在您已将其注释掉。

标签: actionscript-3 custom-event


【解决方案1】:

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

将CustomEvent转换为Event的错误可能是设置事件监听器监听Event而不是CustomEvent

【讨论】:

  • 我认为这是正确的答案。 “return new CustomEvent(type, bubbles, cancelable) as Event;”这一行有些奇怪
  • 添加事件侦听器时,您提供 Event.type 值(String)而不是 EventClass)。所以在这种情况下类转换是无关紧要的,因为我们谈论的是编译器错误,而不是运行时错误。
  • 是的,我缩短了思路。我在考虑监听器和事件处理函数。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      相关资源
      最近更新 更多