2012-06-07 7 views
0

я получаю некоторые странные ошибки при создании CustomEvent, то появляется событие расширяется не дает доступа к свойствам событий: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); 

я получаю сообщение об ошибке, что ПОЛНЫЙ оленья кожа есть .. Хорошо, я установил его на место, а затем его caomplains о не может преобразовать CustomEvent в Event.

Что мне здесь не хватает?

+0

ПОЛНЫХ не существует, вы должны это закомментировано. –

ответ

0

Где отправлено событие и как выглядит подпись слушателя?

1

Необходимо указать это public static const COMPLETE:String = 'complete';, поскольку статические переменные/константы не передаются в расширяющие классы.

Ошибка при преобразовании CustomEvent в событие может быть вызвана установкой прослушивателя событий для прослушивания 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. Unrelated к вопросу компиляции, пользовательское событие имеет еще один вопрос. Ваш метод клонирования не будет клонировать свойство assetName. Попробуйте что-то вроде этого:

    public override function clone():Event 
    { 
        var ret:CustomEvent = new CustomEvent(type, bubbles, cancelable); 
        ret.assetName = assetName; 
        return ret; 
    }