如何使用 GWT EventBus

2023-12-07

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

Widget1 has a Button. Widget2 has a Label,当我按下按钮时,它应该会改变。这些小部件位于DockLayout:

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

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

rootLayoutPanel.add(dock);

我已宣布handleClickAlert in Widget1:

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

当您将项目划分为逻辑部分(例如 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());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 GWT EventBus 的相关文章

随机推荐

  • 如何回滚 gatsby 版本?

    一位同事从我们的一个项目中提取了一个盖茨比存储库 并运行了一些他不应该执行的命令 现在他已经在 gatsby 1 项目上安装了 gatsby 2 不用说 一切都坏了 奇怪的是 我很难找到如何在他的本地计算机上回滚 有人知道如何回滚 gats
  • 检测 iOS 应用程序使用的语言

    如何检测当前应用程序的语言 我不是在谈论NSLocale用户偏好 在我的应用程序中 当前支持两种语言 默认的 en 和特定的 it 我只是想知道哪一个正在实际使用 如果相关的话 作为进一步的解释 我将通过仅针对两种支持的语言的 Web 服务
  • 使用 PHAsset 获取用户照片库时如何分页

    我问同样的问题here我不明白如何实施解决方案 我尝试过以下方法 fileprivate func fetchPhotos indexSet IndexSet let allPhotos PHAsset fetchAssets with i
  • 从 Java BitSet 中随机选取 n 位中的 k 位

    如何准确挑选k来自 a 的位Java位集长度m with n位打开 其中k n m Example input m 20 n 11 Example output k 3 天真的方法 选择一个随机数0 i m 1 如果在输入端打开但在输出端未
  • WPF 数据绑定未更新?

    我有一个项目 我将复选框的 IsChecked 属性与代码隐藏中的 get set 绑定 但是 当应用程序加载时 由于某种原因它不会更新 出于好奇 我将其精简到最基本的内容 如下所示 using statements namespace N
  • 如何在画布上绘制平滑的线条而不清除它?

    I have a canvas that is adding dynamically to the page on on load I want to draw user s mouse path on the canvas but I f
  • mxGraph:使用 XML 创建图表

    我正在尝试从 xml 文件创建图表 我的 JavaScript 代码是 function loadXML console log Inside loadXML var doc mxUtils parseXml
  • 在 C++ 类中初始化数组和可修改的左值问题

    我有一个基本的 C 类 标题如下所示 pragma once class DataContainer public DataContainer void DataContainer void int getAgeGroup void int
  • Pandas 比较下一行

    我有一个像这样的数据框 d d z Q8 Q8 Q7 Q9 Q9 d t 10 30 10 31 10 38 10 40 10 41 d qty 20 20 9 12 12 我想比较第一行和第二行 数量与下一行相同并且 下一行中的 t 更大
  • 使用 CSS 将图像水平居中

    我正在尝试使用 css 将图像水平居中 我使用以下 HTML 代码在屏幕上显示我的图像 div class loading invisible img class loading src logo png div 我正在裁剪图像 因为我只想
  • Gzip 不工作,服务器 2012,IIS 8

    在 Windows Server 2012 标准 上的 IIS 8 上激活 Gzip 时出现问题 所以我激活了Windows功能中的压缩 我选中了 IIS 中的两个复选框 压缩 动态和静态 但仍然没有可用的 Gzip 但是 在我的本地主机
  • 使用python分割多页tiff图像

    我有一个功能可以分割多页 tiff from PIL import Image ImageSequence im Image open Sample tiff for i page in enumerate ImageSequence It
  • 如何编码Realm的List<>类型

    我正在尝试将 Realm 数据库编码为 JSON 一切正常 除了List lt gt 编码 所以我的问题是 你会如何编码List lt gt 因为List不符合可编码更近可解码协议 现在我正在这样做 objcMembers class Us
  • 动态 ng-init 变量 - Angularjs

    coffee FooCtrl gt scope products Product query html div div div class slideshow img div div 我想做这样的 但是ng init images prod
  • 在 AJAX 风格 jQuery UI 选项卡中加载的 jQuery UI 对话框窗口

    AJAX 选项卡工作得非常好 这部分非常简单 但是 让 AJAX UI 对话框模式窗口触发链接并不成功 任何对此的帮助将不胜感激 没有什么比那个男人更容易的了 试试这个
  • 使用 Photoshop JavaScript 执行系统命令行提示符

    我正在使用 Photoshop 使用动作集自动处理图像 我已将 javascript 添加到我的操作集之一 我想使用 javascript 发出 Windows 命令行提示符 这可能吗 有某种类型的system exec 函数来做到这一点
  • 使用会话测试 Rails 控制器

    在我的应用程序中 我有一个会话控制器 现在我想测试用户控制器 只有登录后才能访问该控制器 我的问题是如何伪造会话 我已经尝试了很多 所以我希望你现在可以帮助我 应用控制器 helper method current user def aut
  • 使用AsyncTask加载位图图像

    当有人使用我的应用程序时 我试图在后台加载图像 我写的逻辑是这样的 public class ImageLoader extends AsyncTask
  • 为什么时区感知日期时间的 tzinfo 不等于时区?

    gt gt gt import pytz gt gt gt tz pytz timezone America Chicago gt gt gt dt naive datetime year 2017 month 6 day 6 gt gt
  • 如何使用 GWT EventBus

    我想知道如何使用EventBus或者是否有一些更好的解决方案来发送Event通过该项目 Widget1 has a Button Widget2 has a Label 当我按下按钮时 它应该会改变 这些小部件位于DockLayout Ro