【问题标题】:Which GWT EventBus should I use?我应该使用哪个 GWT EventBus?
【发布时间】:2012-01-20 20:52:59
【问题描述】:

在 gwt-user.jar 中有 2 个 EventBus 接口和 SimpleEventBus 实现。

com.google.gwt.event.shared.EventBuscom.google.web.bindery.event.shared.EventBus 我将它们称为“gwt.event”和“web.bindery”。

查看 JavaDocs 和源代码,我可以看到 gwt.event 只是包装了 web.bindery 之一。然而 gwt.event 实现也隐藏了一些不推荐使用的方法

那么我应该使用哪种实现方式? (我在 GWT 2.4 上)

【问题讨论】:

  • 我也有同样的困境。也许,很多其他人都有。我忽略了不推荐使用的建议并使用旧包,因为谷歌在那里制造了一个烂摊子。

标签: java gwt event-handling


【解决方案1】:

一般你应该使用com.google.web.bindery中的那个。唯一的版本曾经在 com.google.gwt.event 中,但是当 RequestFactory 和 AutoBeans 被移出 GWT 本身并进入 com.google.web.bindery 以便它们可以在非 GWT 客户端中工作时。

如果您在演示者等中使用com.google.web.bindery 版本,它将更容易在您需要时在外部 GWT 应用程序中使用。将该实例传递给 PlaceController 和其他使用 EventBus 的类时,您也不会收到弃用警告。

【讨论】:

  • 啊!非 GWT 客户端非常有意义。
  • 如果你使用Activity和Places,Activity在start方法中想要一个com.google.gwt.event.shared.EventBus
【解决方案2】:

我知道这个问题已经有了答案,但可能值得添加以下内容。正如我在上面的评论中所说,Activity 仍然需要 com.google.gwt.event.shared.EventBus 类。为了避免被弃用的警告,我做了以下(我使用 GIN):

public class GinClientModule extends AbstractGinModule {

    @Override
    protected void configure() {
        bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
        ...
    }

    @Provides
    @Singleton
    public com.google.gwt.event.shared.EventBus adjustEventBus(
            EventBus busBindery) {
        return (com.google.gwt.event.shared.EventBus) busBindery;
    }

...

通过这样做,您将始终使用来自 bindery 包中“新”版本事件总线的对象。

【讨论】:

    【解决方案3】:

    如果您使用活动,那么您可能不得不使用已弃用的活动,至少在他们清理整个 API 之前:http://code.google.com/p/google-web-toolkit/issues/detail?id=6653

    【讨论】:

    • 感谢问题链接。我会遇到问题。
    【解决方案4】:

    使选择更加复杂。我在我的 GWT 应用程序中使用番石榴,谷歌的家伙在那里添加了另一个 EventBus(甚至更少的功能完成)。

    也许这些人需要坐在一起定义一个实现来统治他们所有人?

    显然,对于 GWT 代码中未严格使用的代码,我希望避免对 GWT 的所有依赖,因此 Guava 对我来说看起来很有趣。

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2011-02-08
      • 1970-01-01
      • 2016-09-28
      • 2015-12-05
      • 1970-01-01
      相关资源
      最近更新 更多