首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用GWT EventBus

如何使用GWT EventBus
EN

Stack Overflow用户
提问于 2011-05-17 19:38:05
回答 1查看 38.6K关注 0票数 49

我想知道如何使用EventBus,或者是否有更好的解决方案来通过项目发送Event

Widget1有一个ButtonWidget2有一个Label,当我按下按钮时,它应该会改变。这些小部件位于DockLayout

代码语言:javascript
复制
RootLayoutPanel rootLayoutPanel = RootLayoutPanel.get();
DockLayoutPanel dock = new DockLayoutPanel(Unit.EM);

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

rootLayoutPanel.add(dock);

我已经在Widget1中声明了一个handleClickAlert

代码语言:javascript
复制
@UiHandler("button")
void handleClickAlert(ClickEvent e) {
    //fireEvent(e); 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-17 19:54:14

当您将项目划分为逻辑部分(例如,使用MVP)时,不同的部分有时需要进行通信。典型的这种通信是通过发送状态变化来完成的,例如:

logged-out.

  • user
  • 用户已登录/ URL直接导航到页面,因此需要更新菜单。

在这些情况下,使用事件总线是非常合理的。

要使用它,您需要为每个应用程序实例化一个EventBus,然后所有其他类都会使用它。要实现这一点,请使用静态字段、工厂或依赖项注入(GWT中为GIN)。

使用您自己的事件类型的示例:

代码语言:javascript
复制
public class AppUtils{

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

通常,您还会创建自己的事件类型和处理程序:

代码语言:javascript
复制
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);
}
}

和操控者:

代码语言:javascript
复制
public interface AuthenticationEventHandler extends EventHandler {
    void onAuthenticationChanged(AuthenticationEvent authenticationEvent);
}

然后像这样使用它:

代码语言:javascript
复制
AppUtils.EVENT_BUS.addHandler(AuthenticationEvent.TYPE, new AuthenticationEventHandler()     {
        @Override
        public void onAuthenticationChanged(AuthenticationEvent authenticationEvent) {
            // authentication changed - do something
        }
    });

并触发该事件:

代码语言:javascript
复制
AppUtils.EVENT_BUS.fireEvent(new AuthenticationEvent());
票数 105
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6030202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档