Гибкая обработка событий

Folks,

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

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

Обе панели т.е. Panel1 а также Panel2 находятся под тем же заявлением.

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

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

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

Благодарю.

4 ответа

Решение

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

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

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

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

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

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

Здесь что-то не так. Добавить прослушиватель событий в код кнопки? Это пользовательская кнопка? Даже если это так, кнопка не должна обрабатывать события - она ​​должна быть простым строительным блоком, отправляющим свои собственные события нажатия и не относящимся ни к чему другому.
То, что вам действительно нужно, это уведомить один компонент о деятельности другого. Вы можете просто "использовать 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 для каждого события.

Другие вопросы по тегам