我们使用MVP和自定义EventBus来浏览视图。我们的一个GWT模块在视图中加载电子书。我们有一个名为“Expand”的按钮,点击它后,以扩展模式加载电子书,从而隐藏页眉,页脚等。
让我们说带有“Expand”按钮的视图(UiBinder)被命名为“ShowEbookView”。单击“展开”按钮后,将捕获ClickEvent并将其触发到EventBus。逻辑onExpand(final ExpandEvent expandEvent)
写在同一个“ShowExpandedMod”类中。
一切都还可以,但我们在展开模式下有一个名为“Popout”的按钮,点击后,应该在新页面中打开电子书!我们需要抽象“ShowExpandedMod”类,以便它可以与EbookId一起使用,并且可以在新页面中使用。
我们为这个新的弹出窗口创建了一个带有EntryPoint类,HTML页面和UiBinder页面的新模块。我不知道如何继续进行抽象,并在不同的模块中使用EventBus来加载相同的内容......(具有可重用性的课程)
我已尽力解释,但也许不是很清楚!如果您想了解更多详情,请与我们联系。
谢谢!
答案 0 :(得分:2)
当您在浏览器中打开一个新窗口时,您基本上会得到一个GWT应用程序的新实例。您不能在不同的浏览器窗口中使用EventBus,即跨不同的GWT模块实例。
你能做的是:
在Popout页面URL中添加一个参数。这是通过“历史令牌”(片段标识符)完成的,例如http://yourdomain.com/popout.html#theIdOfTheDocument
。然后,您可以通过History.getToken()
使用DOM在浏览器窗口之间进行通信:javascript中的window.open()
打开一个新窗口并返回对新窗口的DOM的引用。然后,您可以访问新窗口的属性和功能。这都是javascript,为了在GWT中完成这项工作,你需要将它包装在JSNI中。
答案 1 :(得分:1)
具体而言,请尝试使用MVP4G - 查看他们的multi-modules功能(利用GWT的代码拆分功能)。
这应该可以使多个EventBus
和跨模块事件触发器更容易处理。