2011-06-13 58 views
1

我们使用MVP和自定义的EventBus来浏览视图。我们的一个GWT模块在视图中加载电子书。我们有一个名为“展开”的按钮,点击后,以扩展模式加载电子书,从而隐藏页眉,页脚等。GWT - 通过EventBus连接两个模块

让我们说视图(UiBinder)的“展开”按钮命名为“ShowEbookView ”。点击“展开”按钮后,ClickEvent被捕获并触发到EventBus。逻辑onExpand(final ExpandEvent expandEvent)写在同一个“ShowExpandedMod”类中。

一切都没问题,但我们在扩展模式下有一个名为“Popout”的按钮,点击时应该在NEW页面中打开电子书!我们需要抽象“ShowExpandedMod”类,以便它可以与EbookId一起使用并可以在新页面中使用。

我们为这个新的弹出窗口创建了一个带有EntryPoint类,HTML页面和UiBinder页面的新模块。我不知道现在如何进行抽象,并使用EventBus跨不同的模块来加载相同的内容...(与可重用性的课程)

我已经说明了我最好的,但可能不是很清楚!请让我知道你是否想要更多的细节。

谢谢!

回答

2

当你在浏览器中打开一个新窗口时,你基本上会得到一个GWT应用程序的新实例。您不能在不同的浏览器窗口中使用EventBus,即跨越不同的GWT模块实例。

你可以做的是:

  1. 添加的参数来跳隙页面URL。这很容易通过“历史令牌”(片段标识符)来完成,像这样的http://yourdomain.com/popout.html#theIdOfTheDocument。然后,你可以通过History.getToken()

  2. 使用DOM检索令牌浏览器窗口之间进行通信:window.open()在JavaScript中打开一个新窗口,并返回的新窗口,以DOM参考。然后可以访问新窗口的属性和功能。这是所有的JavaScript,为了使这个工作在GWT中,你需要将它包装在JSNI中。

+0

有道理,谢谢...我怎样才能在开发模式下工作,无需单独运行模块... – Laliluna 2011-06-13 19:35:34

1

尝试使用MVP4G,在具体的 - 看看他们multi-modules功能(该功能使用GWT的代码分裂能力)。

这应该使多个EventBus和跨模块事件触发器更容易处理。