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

时间:2017-06-21 10:02:32

标签: gwt

我将GWT代码分成不同的模块,如

  

PrintPermit.gwt.xml

     

EmployeeResponse.gwt.xml

     

Rejected.gwt.xml

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

在我的HTML主页中,我正在调用脚本,如

  

ae.init.EmployeeResponse.nocache.js

我有一个像

这样的菜单
  

打印应用程序

     

拒绝申请

     

新申请

每当用户点击new application默认新应用程序将会打开 当我在我的HTML主页中静态声明EmployeeResponse.nocache.js时。

现在我想通过点击按钮print and reject button

调用其他模块

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

3 个答案:

答案 0 :(得分:1)

以下是我过去做过的事情:

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

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

答案 1 :(得分:1)

有一个InterAppEventBus的例子:

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

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

https://github.com/FrankHossfeld/InterAppEventBus

希望有所帮助。

答案 2 :(得分:0)

您可以通过单独的Html文件为每个模块实现此目的。

首先,为每个应用程序创建单独的html,例如PrintPermit.html并在每个html中指定相应的nocache.js。

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

加载相应的html

e.g。对于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加载