java - 如何在 Composite 扩展类中获取 EventBus 实例?

标签 java gwt gwtp gwt-platform gwt-mvp

如何获取com.google.web.bindery.event.shared.EventBus实例位于 com.google.gwt.user.client.ui.Composite扩展类?;

我读过:How to use EventBus for non-Presenter class in GWTP? ,但我正在寻找类似的答案:

GWT 开发的最佳方法

我有一个小部件,我想触发一个事件 IndicatorEvent 。但在这个小部件中,我没有该事件的处理程序。

处理程序位于其他类中。因此,要启动它,我将使用:

fireEvent(new IndicatorEvent("Custom Widget Message"));

方法fireEvent可在 com.google.web.bindery.event.shared;EventBus 中找到

public abstract void fireEvent(Event<?> event);

所以我需要一个 EventBus 的实例在扩展 Composite 的 View 类中。这个 View 没有 MVP 的东西(presenters、uihandlers 等),它只是一个简单的类元素/小部件。

我应该采取什么方法?

  • 我应该将其转换为 Presenter/View一对? (在 gwtp Presenters 中是来自 PresenterWidget 类的 EventBus 引用)然后使用 ui 处理程序,将执行从 View 委托(delegate)给 Presenter?
  • 我应该inject EventBus 的实例进入小部件类?

请帮忙。

最佳答案

任何 Widget 都可以在不使用 EventBus 的情况下触发事件。

如果您知道此事件的接收者,则只需将处理程序直接附加到接收者即可。为此,您可以在复合小部件中定义此方法:

public HandlerRegistration addIndicatorEventHandler(IndicatorEventHandler handler) {
    return addHandler(handler, IndicatorEvent.TYPE);
}

然后在您的其他小部件(收件人)中:

myCustomWidget.addIndicatorEventHandler(new IndicatorEventHandler() {

    @Override
    public void onIndicator(IndicatorEvent event) {
        // do something
    }

});

如果 (a) 两个小部件(触发事件和事件接收者)之间没有直接/简单的链接,(b) 有许多接收者,和/或 (c) 您不希望使用 EventBus,则需要使用 EventBus在包含事件触发小部件和事件接收者的代码部分之间创建依赖关系。

关于java - 如何在 Composite 扩展类中获取 EventBus 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397669/

相关文章:

java - 使用 AES-128 加密/解密大于 256 字节的字节数组

Eclipse 3.7/GWT+GAE 向导,资源已经存在?

css - 如何在 GWT 的 UiBinder 中将样式名称 "Multiple css classes"添加到 1 个元素中?

GWTP Presenter prepareFromRequest - 将数据加载到从事件中检索到的表单中

java - Java 中的显式对象转换

java - 如何通过在相邻字符之间添加空格将一个单词分成两个单词

Java循环米转换程序

java - 将图像参数从 GWT/GXT 传递到 Jasper 报告的问题

java - 哪个版本的 ReSTLet 框架适合 GWT 和 GAE 项目?

java - 为什么私有(private)内部类中的变量无法从 Get 中的 AsynC 回调方法获取具有值的私有(private)变量的值?