在mvp4g gwt中使用事件总线进行模块间通信

时间:2013-10-17 17:10:57

标签: gwt mvp4g

我们的Web应用程序基于mvp4g框架。为了解释我的情况,我将使用以下符号:

A, B              - two different gwt modules
presenterA, viewA - presenter and view pair in module A
            viewA contains an iframe and a button along with other UI components
presenterB, viewB - presenter and view pair in module B
eventBusA         - an eventBus in A with event handler in presenterA
eventBusB         - an eventBus in B with event handler in presenterB

应用程序流程从加载A开始。系统会显示viewA,其中包含一个按钮和一个iframe,点击iframe中的B加载模块,通过调用网址同时隐藏viewA来自有效查看。因此它仍然在后台活跃。 B是一个单独的模块(AB之间没有子父关系)。它会加载viewB,在viewB点击一下按钮后,我想再次转到eventBusA中的某个活动,因为我想将viewA的状态从隐藏更改为可见。但eventBusApresenterB无法访问eventBusB

我尝试过以下无效的方法:

  1. 在eventBusB中创建并发生事件,以响应通过presenterB在viewB中单击。添加了presenterA作为处理程序。
  2. 在同一事件中添加了moduleToLoad,其中模块A为目标。它要求将A声明为子模块。
  3. 使用GWT-Exporter项目考虑javascript API。
  4. 请帮助我,因为我被困在模块间通信中。

    感谢。

1 个答案:

答案 0 :(得分:0)

您的问题是,模块B必须向模块A发送推送通知。没有现成的解决方案。

最佳解决方案是,发送URL以再次启动模块A并使用放置模式恢复模块A的应用程序状态。

因此,模块A必须向模块B发送令牌(历史令牌)。模块B必须保存令牌,如果模块B将控制权交还给模块A,则必须调用模块A的URL和使用令牌作为#-parameter。看一下mvp4g的历史记录。