Flex 4 перемещает настраиваемое событие из настраиваемого компонента (зачем Flex преобразовывает настраиваемое событие в mouseevent) - PullRequest
0 голосов
/ 02 марта 2012

Это НЕ дубликат моего предыдущего поста (немного отличается)

Но это аналогичная проблема с похожей ошибкой, но это не та же ошибка

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

Ошибка типа: ошибка # 1034: сбой приведения типа: невозможно преобразовать события :: MapEvent @ a74ab51 вflash.events.MouseEvent.

     dispatchEvent(new MapEvent(MapEvent.CLICKED_ON_MAP));

Примечание. Ошибка в моем предыдущем сообщении приводит к сообщению об ошибке ниже

Ошибка приведения типа:невозможно преобразовать flash.events::Event@81ecb79 в com.events.ShopEvent

Разница здесь в двух вещах: более ранняя ошибка - при преобразовании события flash в пользовательское событие, а теперь - при преобразованиипользовательское событие, чтобы мигнуть событие, и, во-вторых, я понятия не имею, почему он пытается конвертировать в mouseevent, где я просто отправляю свое пользовательское событие с соответствующими слушателями.

Может кто-нибудь исправить меня, чтоЯ делаю неправильно здесь.

Это мое обычное событие

package events
{
    import flash.events.Event;

    import ui.map.MapElement;

    public class MapEvent extends Event
    {
        public static const NEW_ELEMENT_ATTACHED:String = "newElementAttached";
        public static const CLICKED_ON_MAP:String = "clickedOnMap";
        public static const CLICKED_ON_ELEMENT:String = "clickedOnElement";

        public var element:MapElement;

        public function MapEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){
            super(type, bubbles, cancelable);
        }

        override public function clone():Event{

            var c:MapEvent = new MapEvent(type, bubbles, cancelable);
            c.element = this.element;
            return c;
        }
    }
}

Это то, как я отправляю событие из моего пользовательского компонента (файл класса WorldMap.as)

    private function clickHandler(e:MouseEvent):void{
        e.stopImmediatePropagation();
        trace("worldmap click handler");
        if (dragInProgress){
            /*trace ("stopping event propagation");*/
            dragInProgress = false;
            return;
        }else{
            trace("dispatching proxy click event");
            dispatchEvent(new MapEvent(MapEvent.CLICKED_ON_MAP));
        }
    }

Я также объявил метатег [Event]

[Event(name="newElementAttached", type="events.MapEvent")]
[Event(name="clickedOnMap", type="events.MapEvent")]
[Event(name="clickedOnElement", type="events.MapEvent")]

Наконец, слушатель подключен к другому компоненту (controller.as)

        _userWorld.addEventListener(MapEvent.CLICKED_ON_MAP,clickedOnWorldMap);
        _userWorld.addEventListener(MapEvent.CLICKED_ON_ELEMENT,clickedOnElement);

    private function clickedOnWorldMap(e:MouseEvent):void{
        _draggingMapElement.hideBaseGrid();
        _draggingMapElement = null;
    }
    private function clickedOnElement(e:MapEvent):void{

    }

1 Ответ

0 голосов
/ 02 марта 2012

Это мое плохо. Я исправил глупую ошибку.

Я изменил определение функции списка. (Заменить mouseevent на MapEvent)

    private function clickedOnWorldMap(e:MapEvent):void{
        _draggingMapElement.hideBaseGrid();
        _draggingMapElement = null;
    }
...