Как вы используете GWT SimpleEventBus или EventBus? - PullRequest
5 голосов
/ 23 ноября 2010

Я работаю над разработкой некоторого простого графического программного обеспечения, которое должно быть реализовано как в Swing, так и в GWT. Что касается gwt, я собираюсь использовать gwt-g2d для холста. Я надеялся использовать шину событий в обеих реализациях, чтобы упростить некоторые программы.

Насколько я понимаю, это должно быть примерно так:

  1. Создание экземпляра EventBus
  2. Создание родительского виджета, приемник событий, которые вы хотите для EventBus (например, при наведении мыши или обратном вызове rpc)
  3. Установите EventBus для прослушивания событий из виджета Parent.
  4. Создание дочерних виджетов, которые должны регистрировать в EventBus прослушиватели, которые у него есть (им нужно регистрировать события, которые они могут запускать?)
  5. Когда EventBus получает событие, он должен принять решение о событии и затем принять решение, будь то игнорирование, изменение типа события или просто передача его всем применимым дочерним виджетам.

Это вообще как должно работать? SimpleEventBus по-прежнему является чем-то новым, и я не могу найти много в Интернете о том, как действительно его использовать.

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

SimpleEventBus предоставляет базовые функциональные возможности хранения коллекции обработчиков и, при необходимости, вызова event.dispatch () со всеми соответствующими обработчиками. Я бы не сказал, что вы «устанавливаете EventBus для прослушивания событий» из родительского виджета. SimpleEventBus не имеет понятия «родитель». Вместо этого вы передаете ссылку на ваш SimpleEventBus. Затем любой объект может «инициировать событие» с помощью метода SimpleEventBus.fireEvent. Там нет иерархии.

Аналогично, любой объект может прослушивать эти события с помощью SimpleEventBus.addHandler (). Это ближе всего к вашему # 4 - addHandler принимает тип события и обработчик, поэтому всякий раз, когда этот тип события передается в fireEvent (чем-то в вашем приложении), этот обработчик передается в событие. Обратите внимание, что Event - это то, что вызывает обработчик, а не EventBus! EventBus просто вызывает event.dispatch (theHandler), и программист события отвечает за вызов соответствующей функции в theHandler. Ваш # 5 неточен, по крайней мере для SimpleEventBus - SimpleEventBus вообще не проверяет события, кроме как посмотреть, какие обработчики вызывать. Он не знает ни о дочерних виджетах, ни о какой-либо логике приложения и никогда не меняет тип события.

Ваша логика о том, какой регион выбран, не будет подходящей в EventBus - вместо этого вы создадите обработчик, который выполняет логику и прослушивает ClickEvents. Затем этот обработчик может сообщить выбранному региону, что он был выбран напрямую, или вы можете создать свой собственный RegionSelectionEvent, который вы можете запустить вдоль EventBus, и тогда все регионы могут быть проинформированы о том, что произошло RegionSelection, и ваш регистратор может получить уведомление или монитор вашего сервера может получить уведомление и уведомить начальника о том, что кто-то выбрал регион или что-то еще. Если вам просто нужно отменить выбор одного региона и выбрать другой, шина событий является излишней.

С другой стороны, что-то вроде события «resize» имеет большой смысл, так как все ваши виджеты, возможно, должны знать об этом.

0 голосов
/ 24 ноября 2010

Насколько я понимаю GWT EventBus, он предназначен для событий, которые распространяются на все приложения (представьте себе «общесистемный объект x измененное свойство y»; на него может воздействовать все, что слушает это конкретное событие).Это поможет вам отделить логику приложения.

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

...