2010-02-09 2 views
0

Это самая странная, самая необъяснимая и сложная вещь, с которой я столкнулся со вспышкой, и у меня нет идеи, как решить проблему.поведение причудливого события во вспышке AS3

Рассмотрим эту функцию

public function trackDownloadHandler(event:MP3DownloadEvent):void 
    { 
    dispatchEvent(event); 
    //dispatchEvent(new MP3DownloadEvent(MP3DownloadEvent.OPEN,event.channelPadID)) 
    } 

Я сделал это в миллион раз. Особое событие прибывает в обработчик, который отправил его снова из класса, к которому он прибыл.

Но по какой-то странной причине я получаю сообщение об ошибке говорящее

TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::[email protected] to com.rocudo.audioEngine.events.MP3DownloadEvent. 

Я не вижу, где я пытаюсь преобразовать что-нибудь где-нибудь?

Итак, я попробовал, возможно, просто отправить новое событие вместо этого и посмотреть, как это получилось. Реализация здесь приведена ниже.

public function trackDownloadHandler(event:MP3DownloadEvent):void 
    { 
    //dispatchEvent(event); 
    dispatchEvent(new MP3DownloadEvent(MP3DownloadEvent.OPEN,event.channelPadID)) 
    } 

Но в этом случае сообщение об ошибке оригинального типа уходит, и я получаю новую ошибку говоря

Type was not found or compile time constant :Vector 

Что, черт возьми, происходит ??

ответ

2

I думаю проблема может быть связана с отсутствием метода клонирования, определенного в вашем обычном MP3DownloadEvent.

Adobe Livedocs flash.events.Event clone()

Возвращает новый объект Event, который является копией исходного экземпляра объекта событий. Обычно вы не вызываете clone(); класс EventDispatcher вызывает это автоматически, когда вы redispatch событие, то есть когда вы вызов dispatchEvent (event) из обработчика , который обрабатывает событие.

Для вашей векторной ошибки, я считаю, что векторы доступны только в CS4. Итак, если вы используете код, написанный для CS4 (и используя Vecotrs), и вы компилируете CS3, вы, скорее всего, получите такую ​​ошибку.

+0

Я согласен с sberry2A - переопределить метод clone в вашем настраиваемом классе событий и отправить e.clone(). Хотя, второй подход, о котором вы говорили, работает, создавая новый, и эта ошибка Vector, вероятно, будет связана с тем, что упоминается в sberry2A.Просто имейте в виду, что в какой-то момент вам придется удалить прослушиватель событий, иначе вы столкнетесь с переполнением рекурсии. – falomir

0

Возможно, это отправка сообщениям, которая вызывает trackDownloadHandler(event:MP3DownloadEvent)? Если вы просто отправляете ваниль Event, тогда ошибка, которую вы получаете, имеет смысл.

+0

Спасибо за ответы. Я на самом деле кодирую в flex builder с компилятором 10.0.0, так что я действительно не получаю векторную ошибку вообще? Я не добавил код для своего пользовательского события, но на самом деле это переопределяет метод клонирования. Также я не просто отправляю обычное событие. Я просто не понимаю смысла, но я думаю, что я должен переглядеть что-то Я буду копаться вокруг этого немного больше утром ... Я очень смущен, хотя 0-о. – dubbeat