Принуждение к Flex Type - PullRequest
5 голосов
/ 26 апреля 2009

У меня есть класс по существу:

public class WindowEvent extends Event
{
    public static const WARNEVENT:String = "warnEvent";
    public static const TASKREQEVENT:String = "taskRequestEvent";
    public static const TASKANNOUNCE:String = "taskAnnounce";
    public static const WINDOWCHANGE:String = "windowChange";
    public static const ILLEGALPOSITION:String = "illegalPosition";

    // insert brevity   
}

Первые четыре события работали нормально, но я просто добавил ILLEGALPOSITION и попробовал это:

    // inside Window.as
    private function checkDimensions():void {
       if(!Window._legalBoundaryEnable)
           return;
...    var pass:Boolean = Window.legalBoundary.containsRect(
455        this.getBounds(stage));
456    if(!pass) {
457        this.dispatchEvent(new WindowEvent(WindowEvent.ILLEGALPOSITION,
...           "Illegal Position etc."));
       }
    }

Итак, Флекс выбросил мне этот стек, когда я нажал на способ отправки:

TypeError: Error #1034: Type Coercion failed: cannot convert ¬
        flex.utils.ui::WindowEvent@511dce41 to flash.events.MouseEvent.
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.core::UIComponent/dispatchEvent() ¬
        [C:\autobuild\~\UIComponent.as:9298]
    at flex.utils.ui::Window/checkDimensions()[C:\Users\~\Window.as:457]
    at flex.utils.ui::Window/stageResized()[C:\Users\~\Window.as:220]

Как видно из трассировки, Window.as:<strong>457</strong> - последняя строка кода пользователя. Итак, WTF flash.events.EventDispatcher.dispatchEventFunction пытается сделать с MouseEvent?

Ответы [ 2 ]

5 голосов
/ 26 апреля 2009

Эта ошибка обычно возникает, потому что настроенный слушатель имеет неверный тип параметра события. Я почти уверен, что это должно быть здесь.

Проверьте всех слушателей, которых вы настроили для этого события, и убедитесь, что функция

someFunction(event : WindowEvent) : void
3 голосов
/ 26 апреля 2009

Попробуйте использовать другое значение для ILLEGALPOSITION, "illegalPosition" может быть использовано самой Flex (или другой частью вашего кода) и связано с событием мыши. Поэтому, когда этот обработчик событий срабатывает, он пытается преобразовать ваше событие в MouseEvent, потому что считает, что оно должно быть одним.

...