EventBus能否在GWTP中调用独立的演示者(而不是嵌套的演示者)?

EventBus能否在GWTP中调用独立的演示者(而不是嵌套的演示者)?,gwt,gwt-platform,gwtp,event-bus,Gwt,Gwt Platform,Gwtp,Event Bus,好的,这是我的问题。我有两个演示者:第一个演示者(例如:abc.com#first)和第二个演示者(例如:abc.com#second)。SecondPresenter上有一个按钮&当用户单击该按钮时,第一个Presenter将弹出一条消息 下面是我所做的,我使用eClipse创建了一个事件名MyEvent,eClipse生成了一个类MyEvent.java 在第二个演示者上,我得到: private EventBus eventBus; @Inject public

好的,这是我的问题。我有两个演示者:第一个演示者(例如:abc.com#first)和第二个演示者(例如:abc.com#second)。SecondPresenter上有一个按钮&当用户单击该按钮时,第一个Presenter将弹出一条消息

下面是我所做的,我使用eClipse创建了一个事件名MyEvent,eClipse生成了一个类MyEvent.java

在第二个演示者上,我得到:

    private EventBus eventBus;

    @Inject
    public SecondPresenter(final EventBus eventBus, final MyView view,
            final MyProxy proxy) {
        super(eventBus, view, proxy);
        this.eventBus=eventBus;
    }
    @Override
    protected void onBind() {
        super.onBind();
        passMsgButton.addClickHandler(new ClickHandler(){

            @Override
            public void onClick(ClickEvent event) {
                MyEvent myEvent =new MyEvent();
                myEvent.setMsg("hello");
                SecondPresenter.this.eventBus.fireEvent(myEvent);    
            }               
        });
    }
在第一个演示者上,我得到:

    private final MyHandler myHandler=new MyHandler(){

        @Override
        public void onMy(
                MyEvent event) {
            // TODO Auto-generated method stub
            Window.alert(event.getMsg());



        }}; 

    @Override
    protected void onBind() {
        super.onBind();
        registerHandler(getEventBus().addHandler(MyEvent.getType(), myHandler));
    }       
如果第一个presenter是嵌入在第二个presenter中的嵌套presenter,则上述代码可以正常工作。但是如果他们是两个分开的演示者,那么上面的代码就不起作用了

为什么??我查看了googledoc&他们只是说EventBus可以调用演示者,他们没有说它必须是嵌套的演示者,所以我假设EventBus可以调用任何分离的演示者

我将
private-EventBus
更改为
public-EventBus
,但没有任何帮助

我错过了什么

编辑:

我稍微修改了我的代码,它部分工作。我不确定我做的事情是否正确,因为它仍然存在一些问题

好的,在第一个Presenter上,我实现了MyHandler&重写onMy方法

   public class FirstPresenter extends
    Presenter<FirstPresenter.MyView, FirstPresenter.MyProxy> implements MyHandler{

  private final MyHandler myHandler=new MyHandler(){

    @Override
    public void onMy(
            MyEvent event) {
        // TODO Auto-generated method stub
        Window.alert(event.getMsg());
    }}; 

     @ProxyEvent

     @Override
      public void onMy(MyEvent event) {
        Window.alert(event.getMsg());
          getView().getHtmlPanel().add(new Label("test"));
      }
      @Override
      protected void onBind() {
        super.onBind();
        registerHandler(getEventBus().addHandler(MyEvent.getType(), myHandler));
      }
    }
公共类FirstPresenter扩展
演示者实现MyHandler{
私有最终MyHandler MyHandler=新MyHandler(){
@凌驾
我的公众假期(
MyEvent事件){
//TODO自动生成的方法存根
Window.alert(event.getMsg());
}}; 
@代理事件
@凌驾
年月日公共作废(MyEvent事件){
Window.alert(event.getMsg());
getView().getHtmlPanel().add(新标签(“测试”));
}
@凌驾
受保护的void onBind(){
super.onBind();
registerHandler(getEventBus().addHandler(MyEvent.getType(),myHandler));
}
}
当我单击SecondPresenter(Webbrowser第二个选项卡上的一页)上的按钮时,我看到第二个选项卡上弹出消息(即浏览器没有使第一个选项卡聚焦),但当我单击FirstPresenter(第一个选项卡上的一页)时,我没有看到
标签(“测试”)

为什么它可以调用Window.alert,但没有将标签添加到FirstPresenter

另外,如何让浏览器将焦点设置在第一个演示者上(即显示第一个选项卡)


我遗漏了什么吗?

问题是,如果你有两个顶级演讲者,任何时候只有一个处于活动状态。 我猜,
FirstPresenter
onBind()
方法没有被调用,因此处理程序没有被附加到
事件总线上的
事件

它适用于嵌套的演示者,因为两个
演示者同时处于“活动”状态


你必须依靠自己的努力“唤醒
第一个演示者

你好,非常感谢。我照你说的做了,但部分奏效了。我在我的回答中详细说明了,你能看看我是否遗漏了什么吗?在浏览器中,不同选项卡之间无法进行直接通信。无论如何,你必须非常依赖
消息