Flex AS3 - диспетчеризация событий между классами - PullRequest
1 голос
/ 22 апреля 2009

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

У меня есть ComboBox внутри пользовательского класса HBox ... для простоты я делаю следующее

public function onComboBoxChange(event:MouseEvent):void {
    trace("dispatching event");
    dispatchEvent(new Event("hello"));
}

У меня есть собственный класс List, который я хотел бы ответить на событие ...

public function CustomList() {
    //...
    this.addEventListener(FlexEvent.INITIALIZE, onInit);
}

private function onInit(event:FlexEvent):void {
    this.addEventListener("hello", onHello);
}

private function onHello(event:Event):void {
    trace("oh hello");
}

Однако слушатель события никогда не вызывается.

И CustomList, и CustomHBox имеют одного и того же родителя.

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 апреля 2009

С вами все должно быть в порядке, если ваше событие пузырится. Родитель CustomList и CustomHBox добавит прослушиватель событий в CustomHBox для события, которое вы отправляете из onComboBoxChange. Обработчик события должен находиться в этом родительском классе, и он будет передавать событие / выполнять любой код, который должен быть выполнен в CustomList, т.е.:

public class Main {

public var customList:CustomList;
public var customHBox:CustomHBox;
//...
public function init():void {
   customHBox.addEventListener(MyCustomEvent.EVENT_NAME, myCustomEventHandler, false, 0, true);
}
//...
public function myCustomEventHandler(event:MyCustomEvent):void {
   customList.update(event.data);
}
//...
}
1 голос
/ 22 апреля 2009

В вашем списке либо необходимо вызвать addEventListener ("hello") непосредственно в комбинированном ящике, либо в комбинированном ящике необходимо отправить событие с аргументом пузырей, равным true.

В вашей концепции событий отсутствует «пузырящийся», вы можете узнать больше о событиях во flash на сайте Adobe .

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