Как использовать GWT EventBus - программирование
Подтвердить что ты не робот

Как использовать 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); 
}

Надеюсь, кто-то может мне помочь. Спасибо!

4b9b3361

Ответ 1

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

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

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

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

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

public class AppUtils{

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

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

public class AuthenticationEvent extends GwtEvent<AuthenticationEventHandler> {

public static Type<AuthenticationEventHandler> TYPE = new Type<AuthenticationEventHandler>();

  @Override
public Type<AuthenticationEventHandler> 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());