2012-06-07 162 views
0

我在创建自定义事件时得到一些奇怪的错误,看来事件被扩展到事件属性不授予访问:AS3 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转换为事件。

我在这里丢失了什么?

+0

COMPLETE不存在,你拥有它注释掉。 –

回答

0

事件发送在哪里,听众的签名是什么样的?

1

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

将CustomEvent转换为Event的错误可能是由设置事件侦听器来侦听Event而不是CustomEvent引起的。

+0

我认为这是正确的答案。有一些奇怪的行“返回新的CustomEvent(类型,气泡,可取消)作为事件;” –

+0

添加事件侦听器时,您提供了'Event.type'值(一个'String')而不是'Event'(一个'Class')。所以在这种情况下,类转换是无关紧要的,因为我们正在讨论编译器错误,而不是运行时错误。 – package

+0

是的,我缩短了我的想法。我正在考虑监听器,并因此考虑事件处理功能。 – strah

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