GWT - 通过 EventBus 连接两个模块

发布于 2024-11-15 12:08:40 字数 577 浏览 0 评论 0原文

我们使用 MVP 和自定义 EventBus 来浏览视图。我们的 GWT 模块之一在视图中加载一本电子书。我们有一个名为“Expand”的按钮,单击该按钮后,将以展开模式加载电子书,从而隐藏页眉、页脚等。

假设带有“Expand”按钮的视图(UiBinder)被命名为“ShowEbookView”。单击“展开”按钮后,ClickEvent 被捕获并发送给 EventBus。逻辑onExpand(final ExpandEvent ExpandEvent) 编写在同一个“ShowExpandedMod”类中。

一切都很好,但是我们在展开模式下有一个名为“Popout”的按钮,单击该按钮后,应该在新页面中打开电子书!我们需要抽象“ShowExpandedMod”类,以便它可以与EbookId进行操作并可以在新页面中使用。

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

我已经尽力解释了,但可能不是很清楚!如果您想了解更多详细信息,请告诉我。

谢谢!

We use MVP with custom EventBus to navigate across the views. One of our GWT module loads an ebook within a view. We have a button named "Expand", which upon clicked, loads the ebook in expanded mode thereby hiding the header, footer, etc.

Let us say the view (UiBinder) with "Expand" button is named as "ShowEbookView". Upon clicking "Expand" button, the ClickEvent is captured and fired to the EventBus. The logic onExpand(final ExpandEvent expandEvent) is written in the same "ShowExpandedMod" class.

Everything is okay, but we have a button named "Popout" in the expanded mode, which when clicked, should open the Ebook in a NEW page! We need to abstract the "ShowExpandedMod" class so that it can operate with the EbookId and can be used in the new page.

We have created a new Module with EntryPoint class, HTML page and UiBinder page for this new popout window. I am not sure how to proceed now with the abstraction and to use EventBus across different modules to load the same content ... (with re-usability ofcourse)

I've explained to my best, but perhaps not very clear! Please let me know if you want more details.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

靑春怀旧 2024-11-22 12:08:40

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

您可以做的是:

  1. 向弹出页面 URL 添加一个参数。通过“历史标记”(片段标识符)可以轻松完成此操作,例如 http://yourdomain.com/popout.html#theIdOfTheDocument。然后,您可以通过 History.getToken()

    检索令牌

  2. 使用 DOM 在浏览器窗口之间进行通信:javascript 中的 window.open() 打开一个新窗口并返回对新窗口的 DOM 的引用。然后您可以访问新窗口的属性和功能。这都是 javascript,为了使其在 GWT 中工作,您需要将其包装在 JSNI 中。

When you open a new window in browser you basically get a new instance of your GWT app. You can not use EventBus across different browser windows, i.e. across different GWT module instances.

What you can do is:

  1. Add an argument to the Popout page URL. This is easies done via "history tokens" (fragment identifiers), like this http://yourdomain.com/popout.html#theIdOfTheDocument. Then you can retrieve the token via History.getToken()

  2. Use DOM to communicate between browser windows: window.open() in javascript opens a new window and returns a reference to DOM of the new window. You can then access properties and functions of the new window. This is all javascript, in order to make this work in GWT you'll need to wrap it in JSNI.

时光磨忆 2024-11-22 12:08:40

尝试并使用 MVP4G,具体来说 - 看看他们的 多模块 功能(利用 GWT 的代码分割功能)。

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

Try and use MVP4G, in specific - take a look at their multi-modules feature (which utilizes GWT's code splitting capabilities).

This should make things like multiple EventBus's and cross-module event triggers a lot easier to handle.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文