Events GWTP:事件和嵌套演示者

Events GWTP:事件和嵌套演示者,events,nested,gwtp,presenter,Events,Nested,Gwtp,Presenter,我对GWTP中的事件有一些问题 我有一个扩展TabContainerPresenter的MainPresenter。 此演示者链接到一个主视图,该主视图包含一些ui组件+一些com.gwtplatform.mvp.client.Tab:HomeTab、ContactTab等 MainPresenter应该对某些事件“MyEvent”作出反应 MyEvent有一个相应的MyHandler,它是按照这些良好实践创建的 当我从MainView的ui组件触发事件时,如下所示: MyEvent.fire(

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

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

MainPresenter应该对某些事件“MyEvent”作出反应 MyEvent有一个相应的MyHandler,它是按照这些良好实践创建的

当我从MainView的ui组件触发事件时,如下所示:

MyEvent.fire(this, new MyEventContext(..));
我在MainPresenter中正确捕获了事件

但是,当我在其中一个“Tab Presenter”中执行完全相同的操作时,事件不会被主Presenter捕获

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

MyEvent.fire(this, new MyEventContext(..));
我可以从HomePresenter捕捉事件,但不能从MainPresenter捕捉事件


有什么想法吗?

确保你尊重这些规则:

  • 您在视图中插入的事件总线是
    com.google.web.bindery.event.shared.EventBus
    (而不是
    com.google.gwt.event.shared.EventBus
  • 在处理事件的演示者(HomePresenter或MainPresenter)中,使用
    addRegisteredHandler
    方法在
    onBind
    生命周期方法中注册到事件:

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

  • 我不知道你犯了什么特别的错误。为了帮助您,我制作了一个示例,显示事件可以从选项卡式演示者发送到选项卡式容器演示者。克隆此项目,然后前往#!设定值。您将看到两个“Fire true”和“Fire false”按钮,它们将触发ApplicationPresenter将捕获的事件。

    首先,让我感谢您提供了这一令人敬畏的POC,它是了解出错原因的极好基础。我发现我实际上并没有很好地使用GWTP

    根本问题是我有两个不同的事件总线 我试着看了

    Log.info("eventBus: "+eventBus)
    
    在主演示程序和主演示程序中。日志显示它们没有相同的哈希代码

    这是因为有时,我通过以下操作直接访问EventBus:

    EventBus.Util.getInstance();
    
    鉴于placeManager实例化为:

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

    您使用的是什么版本?首先,让我感谢您提供了这个很棒的POC,它是了解问题所在的极好基础。