如何调用 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
希望对您有所帮助。
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
希望对您有所帮助。