GWTP:事件和嵌套演示者

时间:2013-03-08 10:27:31

标签: events nested gwtp presenter

我在GWTP中遇到一些问题。

我有一个扩展TabContainerPresenter的MainPresenter。 此演示者链接到MainView,其中包含一些ui组件+一些com.gwtplatform.mvp.client.Tab: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不会捕获该事件。

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

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

确保您遵守这些规则:

  1. 您在视图中注入的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);
    }
    
  3. 我不知道你做了什么特别的错误。为了帮助您,我制作了a quick proof of concept,其中显示事件可以从选项卡式演示者发送到TabContainerPresenter。克隆这个项目,然后前往#!settingsPage。您将看到两个“Fire true”和“Fire false”按钮,它们将触发将由ApplicationPresenter捕获的事件。

答案 1 :(得分:0)

首先,让我感谢你们这个令人敬畏的POC,它是了解出了什么问题的绝佳基础。我看到我实际上没有以良好的方式使用GWTP。

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

看到了它
Log.info("eventBus: "+eventBus)

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

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

EventBus.Util.getInstance();

而placeManager实例化为:

DelayedBindRegistry.bind(GWT.create(MyInjector.class))