FLEX, Actionscript: как вызвать CustomEvent? - PullRequest
2 голосов
/ 05 мая 2010

Я создал пользовательский MouseEvent во Flex:

package {

    import flash.events.MouseEvent; 
    public class CustomMouseEvent extends MouseEvent {

        public var tags:Array = new Array();    
        public function CustomMouseEvent(type:String, tags:Array) {
            super(type, true);
            this.tags = tags;
        }
    }
   }

Теперь я хотел бы понять, как передавать теги параметров из Actionscript и MXML:

Из ActionScript я пытаюсь что-то вроде этого, но это не работает:

newTag.addEventListener(MouseEvent.MOUSE_UP, dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP,[newTag.name])));

Из MXML я делаю это, и это не работает так же:

<mx:LinkButton click="dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP, bookmarksRepeater.currentItem.tags))" />

спасибо

Ответы [ 3 ]

3 голосов
/ 05 мая 2010

Попробуйте обернуть код обратного вызова в функцию:

newTag.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent):void {
    dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP, [e.currentTarget.name]));
});

Я думаю, что проблема с кодом MXML заключается в том, что вы используете ретранслятор и пытаетесь получить currentItem после того, как повторение закончено. Попробуйте вместо этого:

<mx:LinkButton click="dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP, event.currentTarget.getRepeaterItem().tags))" />

Надеюсь, это поможет.

Обновление

Поскольку вы создаете объект newTag в цикле, вы получите лучшее использование памяти, просто используя именованную функцию в качестве прослушивателя событий.

newTag.addEventListener(MouseEvent.MOUSE_UP, onTagClick);

...

protected function onTagClick(e:MouseEvent):void {
    dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP, [e.currentTarget.name]));
}

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

2 голосов
/ 05 мая 2010

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

Greetz
back2dos

0 голосов
/ 05 мая 2010

Вы пытались изменить тип на что-то другое, чем тип, который используется в настоящее время. Что-то вроде CustomMouseEvent.MY_CUSTOM_MOUSE, а затем поймайте это, чтобы увидеть, работает ли это. Не уверен, что использование того же имени типа, что и у стандартного типа, является хорошей техникой.

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