Как использовать GWT EventBus

Я еще не знаком с GWT и задаюсь вопросом, как использовать EventBus, или если есть несколько лучших решений для отправки события через проект.

У виджета 1 есть кнопка. Widget 2 имеет ярлык, который должен измениться, когда я нажимаю кнопку. Эти виджеты находятся в DockLayout:

RootLayoutPanel rootLayoutPanel = RootLayoutPanel.get(); DockLayoutPanel dock = new DockLayoutPanel(Unit.EM); dock.addWest(new Widget1(), 10); dock.add(new Widget2()); rootLayoutPanel.add(dock); 

Я объявил handleClickAlert в Виджет 1

 @UiHandler("button") void handleClickAlert(ClickEvent e) { //fireEvent(e); } 

Надеюсь, кто-то может мне помочь. Благодаря!

Когда вы разделяете проект на логические части (например, с MVP), иногда приходится связываться с разными частями. Типичное сообщение отправляет изменения статуса, например:

  • пользователь вошел в систему / вышел из системы.
  • пользователь перемещается напрямую через URL-адрес на страницу, поэтому меню необходимо обновить.

В этом случае использование логики событий вполне логично.

Чтобы использовать его, вы создаете экземпляр одного EventBus для каждого приложения, которое затем используется всеми другими classами. Для этого используйте статическое поле, заводскую или зависимую инъекцию (GIN в случае GWT).

Пример с вашими типами событий:

 public class AppUtils{ public static EventBus EVENT_BUS = GWT.create(SimpleEventBus.class); } 

Обычно вы также создаете собственные типы событий и обработчики:

 public class AuthenticationEvent extends GwtEvent { public static Type TYPE = new Type(); @Override public Type getAssociatedType() { return TYPE; } @Override protected void dispatch(AuthenticationEventHandler handler) { handler.onAuthenticationChanged(this); } } 

и обработчик:

 public interface AuthenticationEventHandler extends EventHandler { void onAuthenticationChanged(AuthenticationEvent authenticationEvent); } 

Затем вы используете его следующим образом:

 AppUtils.EVENT_BUS.addHandler(AuthenticationEvent.TYPE, new AuthenticationEventHandler() { @Override public void onAuthenticationChanged(AuthenticationEvent authenticationEvent) { // authentication changed - do something } }); 

и запустите это событие:

 AppUtils.EVENT_BUS.fireEvent(new AuthenticationEvent()); 
  • простое пользовательское событие
  • Как отправлять события в C #
  • Получить значения DataKey в GridView RowCommand
  • Подписка на динамические события C #
  • Слабая модель обработчика событий для использования с lambdas
  • Суперпростой пример наблюдателя C # / наблюдаемого с делегатами
  • Событие jquery live для добавления элементов dom
  • Как я могу создать событие в usercontrol и поймать его на главной странице?
  • Когда происходит событие «размытия», как я могу узнать, какой элемент фокуса пошел * на *?
  • Разница между e.target и e.currentTarget
  • BackgroundWorker RunWorkerCompleted Event
  • Давайте будем гением компьютера.