2012-06-07 221 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; 
    }