Гибкая обработка событий - PullRequest
0 голосов
/ 22 ноября 2011

Народ,

У меня возникли сомнения в механизме обработки и отправки событий Flex.

Рассмотрим диаграмму ниже,

Обе панели, т.е. Panel1 и Panel2находятся под одним и тем же приложением.

enter image description here

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

Как я могу это сделать?

PS: С тех пор, как AFAIK, dispatchEvent только отправляет событие вверх по иерархии родителей .Это правильно?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 22 ноября 2011

Нет, вы не можете. Но если вы действительно хотите обрабатывать события с перекрестными представлениями или компонентами, не добавляя слишком много зависимостей, я предлагаю вам воспользоваться инфраструктурой, такой как Parsley, и их функциями обмена сообщениями.

http://www.spicefactory.org/parsley/

0 голосов
/ 22 ноября 2011

Самый простой, но плохой метод - parentApplication.addEventListener и parentApplication.dispatchEvent.Для этого вам следует использовать глобальный статический диспетчерский класс.

0 голосов
/ 22 ноября 2011

добавление прослушивателя событий на кнопку приема

Здесь что-то не так. Добавить прослушиватель событий в коде кнопки? Это пользовательская кнопка? Даже если это так, кнопка не должна обрабатывать события - она ​​должна быть простым строительным блоком, отправляющим свои собственные события щелчка и не относящимся ни к чему другому. То, что вам действительно нужно, это уведомить один компонент о деятельности другого. Вы можете просто «использовать Parsley», как предлагает kyohiro, или создать свой собственный соединитель, например:

public class MessageBus extends EventDispatcher {
    //singleton facility
    private static _instance:MessageBus;

    public static get instance():MessageBus {
        if (!_instance) _instance = new MessageBus();
        return _instance;
    }
}

Затем вы используете этот MessageBus для добавления в него прослушивателя событий (Panel2) и отправки событий через него (Panel1). Таким образом, Panel1 не знает о Panel2, они знают только оба MessageBus. Таким образом, для соединения двух компонентов вам нужна только уникальная константа String для каждого события.

0 голосов
/ 22 ноября 2011

Вы не можете.События происходят из компонента и всплывают вверх (дочерний элемент к родительскому элементу), а не вниз (родительский элемент к дочернему элементу) или вбок (одноуровневый элемент к братскому элементу).

Вместо этого в родительском приложении можно использовать прослушиватель событий, который будет вызыватькакая-то функция на панели 2, когда она получает событие с панели 1

...