當您將項目劃分爲邏輯部分(例如MVP)時,有時需要進行通信。典型的通信是發送狀態更改,例如:
- 用戶已登錄/失蹤。
- 用戶直接通過URL導航到頁面,因此需要更新菜單。
在這些情況下使用事件總線非常合乎邏輯。
要使用它,您可以爲每個應用程序實例化一個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());
感謝。這對我很有幫助! – Mark 2011-05-17 12:16:13
發射事件時,我怎麼能發送一個對象?在我的情況下,我需要發送一個包含我的用戶信息的類。 – elvispt 2011-08-18 20:18:17
你可以在你的自定義事件中有一個字段,並通過構造函數設置它,即'new AuthenticationEvent(someObject)' – 2011-08-18 21:14:39