2010-11-23 8 views
5

Я работаю над разработкой некоторого простого графического программного обеспечения, которое должно быть реализовано как в качании, так и в gwt. На стороне gwt я собираюсь использовать gwt-g2d для холста. Я надеялся использовать eventbus для обеих версий для упрощения некоторых программ.Как вы используете GWT SimpleEventBus или EventBus?

Я понимаю, что это должно быть что-то вроде этого:

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

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

ответ

2

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 произошел, и ваш регистратор мог получить уведомление или монитор вашего сервера могут получить уведомление и уведомить босса о том, что кто-то выбрал регион или что-то еще.Если вам просто нужно снять выделение с одного региона и выбрать другое, eventbus будет излишним.

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

0

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

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

+0

Я подумал, что часть его очарования заключалась в том, что он облегчил автоматические тестовые примеры, используя инъекцию событий пользовательского интерфейса. В любом случае, причина, по которой я пытался это сделать, состояла в том, что у одного холста может быть 4 области графика, и в этих регионах может быть установлено 4 объекта графика. Если я нажимаю на объект графа, мне нужно пропустить некоторую логику, чтобы увидеть, какой из них выбран, потому что точка может перекрываться. Мои пользовательские события будут такими, как изменение размера, новые данные, новый datawindow, новый масштаб и т. Д. – Brian 2010-11-23 23:41:42

Смежные вопросы