当你将项目分解为逻辑部分(例如使用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) {
}
});
并触发事件:
AppUtils.EVENT_BUS.fireEvent(new AuthenticationEvent());
GenericEvent
即可。 - Igor Klimer