如何调用 GWT 模块入口点 class?

how to call a GWT module entry point class?

l 将我的 GWT 代码拆分到不同的不同模块中,例如

PrintPermit.gwt.xml

EmployeeResponse.gwt.xml

Rejected.gwt.xml

并且每个模块都有自己的入口点class

在我的 HTML 主机页面中,我正在调用类似

的脚本

ae.init.EmployeeResponse.nocache.js

我有一个像

这样的菜单

Print Application

Reject Application

New application

只要用户点击 new application 默认的新应用程序就会打开 正如我在我的 HTML 主机页面中静态声明 EmployeeResponse.nocache.js

现在我想在点击按钮时调用其他模块print and reject button

如何为打印和拒绝模块调用 nocache js。有没有办法动态调用。 请大家帮帮我。

您可以通过为每个模块单独的 Html 文件来实现这一点。

因此,首先为每个应用程序创建单独的 html,例如PrintPermit.html并在每个html.

中指定对应的nocache.js

然后在菜单中的按钮上添加点击处理程序,并在每次点击时通过 Window.open()

加载相应的 html

例如对于 PrintPermit,

printPermitButton.addClickHandler(new ClickHandler{
        @Override
        public void onClick(ClickEvent arg0) {
              String s = GWT.getHostPageBaseURL() + "PrintPermit.html";
                Window.open(s, "PrintPermit", "");
        }
});

请注意 window.open 将在浏览器的新选项卡中打开,您也可以使用 gwt iframe 在同一浏览器页面中打开 html。

每个模块都会有相应的 nocache.js 并且会使用 Window.open()

通过 html 加载

以下是我过去的做法:

  • 首先,在您要导出的模块中,您需要确保您要导出的代码最终不会被混淆。这可以通过自由使用 @JsType 来实现;这是导出 JS 的新方法,可用于 GWT 2.8(相对于 JSNI)。
  • 你的模块的入口点onModuleLoad可以是空的;它不需要做任何事情。
  • 将您的 JS 包含在您要使用的 HTML 中(可能与您的 "main" 模块相同的页面)
  • 查看 JSInterop 文档(也许是可用的 here),了解如何在 GWT 应用程序中使用本机 JS(因为现在,您的 GWT 模块已成为本机 JS)。通过 JSInterop 从您的库中导入 类,并使用它们。

请注意 GWT JS 加载的异步性质;您的库将以异步方式加载,就像任何 JS 应用程序一样(因此,当您的页面加载时,它不会立即可用)。为了克服这个问题,我在我的库的 onModuleLoad 函数中放置了一个对本机 JS 函数的调用(即确保您通知任何潜在的侦听器代码已加载;因为当 onModuleLoad 运行时,代码肯定已加载)。

有一个 InterAppEventBus 的例子:

https://github.com/sambathl/interapp-eventbus

显示了两个 GWT 应用程序之间的通信。 我采用了它并用 Elemental2 和 WebStorage 替换了 JSNI:

https://github.com/FrankHossfeld/InterAppEventBus

希望对您有所帮助。