簡體   English   中英

如何使用GWT EventBus

[英]How to use the GWT EventBus

我想知道如何使用EventBus或者是否有更好的解決方案來通過項目發送Event

Widget1有一個Button Widget2有一個Label ,當我按下按鈕時應該更改。 這些小部件位於DockLayout

RootLayoutPanel rootLayoutPanel = RootLayoutPanel.get();
DockLayoutPanel dock = new DockLayoutPanel(Unit.EM);

dock.addWest(new Widget1(), 10);
dock.add(new Widget2());

rootLayoutPanel.add(dock);

我在Widget1聲明了一個handleClickAlert

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

當您將項目划分為邏輯部分(例如使用MVP)時,不同部分有時需要進行通信。 典型的此通信是通過發送狀態更改來完成的,例如:

  • 用戶登錄/注銷。
  • 用戶通過URL直接導航到頁面,因此需要更新菜單。

在這些情況下,使用事件總線是非常合理的。

要使用它,您EventBus為每個應用程序實例化一個EventBus ,然后由所有其他類使用。 為此,請使用靜態字段,工廠或依賴注入(在GWT的情況下為GIN)。

您自己的事件類型的示例:

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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM