Ошибка приведения типа в dispatchEvent - PullRequest
0 голосов
/ 01 декабря 2009

У меня есть три класса: A, B, C. класс A отправляет событие, класс B будет обрабатывать это и затем отправлять его C. Однако я получил эту странную ошибку приведения типа в функции dispatchEvent B, которая выглядит следующим образом:

 public function handler(event:SomeEvent):void {
        removeEventListeners();
        dispatchEvent(event);
 }

Если я изменю это на следующее, то я не получу никакой ошибки:

 public function handler(event:SomeEvent):void {
        removeEventListeners();
        var newEvent:SomeEvent = event.clone(); //create a clone of itself
        dispatchEvent(newEvent);
 }

Может кто-нибудь помочь мне в этом? Спасибо.

Ответы [ 2 ]

4 голосов
/ 01 декабря 2009

Используете ли вы пользовательское событие? Если да, то вам нужно определить метод клонирования. При повторной отправке вспышка события автоматически клонирует событие и отправляет клон. Вот почему, когда вы изменили свой код на event.clone (), он работает. Итак, в двух словах, ваша вторая реализация верна.

Если вы не хотите писать этот дополнительный бит кода, вам следует реализовать метод clone. Документация EventDispatcher.dispatchEvent () объясняет это: http://help.adobe.com/en_US/AS3LCR/Flash_10.0/

0 голосов
/ 01 декабря 2009

Вы могли бы сделать это.

public function handler(event:SomeEvent):void {
    removeEventListeners();
    dispatchEvent(event.clone);
 }

Вам необходимо клонировать событие. Как только они отправлены, они не могут быть повторно отправлены, если не клонированы. Я не уверен, почему это, возможно, связано с обработчиками, попадающими в бесконечные циклы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...