Гибкая обработка событий
Folks,
У меня были сомнения в механизме обработки и отправки событий Flex.
Рассмотрим схему ниже,
Обе панели т.е. Panel1
а также Panel2
находятся под тем же заявлением.
Я хочу отправить событие по клику на Send
Кнопка и сможете прослушивать это событие, добавив прослушиватель событий на Receive
Кнопка.
Как я могу это сделать?
PS: С тех пор, AFAIK, dispatchEvent
отправляет событие только в иерархию родителей. Это правильно?
Благодарю.
4 ответа
Нет, ты не можешь. Но если вы действительно хотите обрабатывать события между представлениями или компонентами, не добавляя слишком много зависимостей, я предлагаю вам воспользоваться фреймворками, такими как 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 для каждого события.