0

我对 GWTP 中的事件有一些问题。

我有一个扩展 TabContainerPresenter 的 MainPresenter。此演示者链接到包含一些 ui 组件 + 一些 com.gwtplatform.mvp.client.Tab 的 MainView:HomeTab、ContactTab 等。

MainPresenter 应该对某些事件“MyEvent”做出反应 MyEvent 具有相应的 MyHandler 并且是按照这些良好做法创建的http://arcbees.wordpress.com/2010/08/24/gwt-platform-event-best-practice/

当我像这样从 MainView 的 ui 组件触发事件时:

MyEvent.fire(this, new MyEventContext(..));

我在 MainPresenter 中正确捕获了该事件。

但是当我在“Tab Presenter”之一中执行完全相同的操作时,MainPresenter 不会捕获该事件。

例如,在作为 MainPresenter 的“HomeTab”的 HomePresenter 中,当我这样做时

MyEvent.fire(this, new MyEventContext(..));

我可以从 HomePresenter 中捕获事件,但不能从 MainPresenter 中捕获。

任何的想法?

4

2 回答 2

1

确保您遵守这些规则:

  1. 您在 View 中注入的 EventBus 是com.google.web.bindery.event.shared.EventBus(而不是com.google.gwt.event.shared.EventBus
  2. 在处理事件的 Presenter(HomePresenter 或 MainPresenter)中,使用生命周期方法中的方法注册到addRegisteredHandler事件onBind

    @Override
    protected void onBind() {
        super.onBind();
    
        addRegisteredHandler(MyEvent.getType(), this);
    }
    

我不知道你犯了什么特别的错误。为了帮助你,我做了一个快速的概念证明,它表明事件可以从选项卡式演示者发送到 TabContainerPresenter。克隆这个项目,然后前往#!settingsPage。您将看到两个“Fire true”和“Fire false”按钮,它们将触发将被 ApplicationPresenter 捕获的事件。

于 2013-03-08T16:17:00.127 回答
0

首先,让我感谢您提供了这个很棒的 POC,它是了解问题所在的绝佳基础。我看到我实际上并没有以好的方式使用 GWTP。

根本问题是我有 2 个不同的 eventBus 我通过尝试看到它

Log.info("eventBus: "+eventBus)

在 MainPresenter 和 HomePresenter 中。日志显示它们没有相同的哈希码。

这是因为有时我通过以下方式直接访问 EventBus:

EventBus.Util.getInstance();

而 placeManager 实例化为:

DelayedBindRegistry.bind(GWT.create(MyInjector.class))
于 2013-03-12T11:23:47.710 回答