如果我理解正确,您需要从 Javascript 调用 GWT 方法。您可以使用 JSNI。但我认为您应该在 GWT 端尝试 gwt-exporter。概述。教程。为您的 GWT 模块创建 JS_API 是一个简单的 GWT 模块。
不假装是最佳实践,只是简单的例子。
在服务器端,您在每个页面上都包含一个带有对话框的现有 GWT 模块。您需要修改此 GWT 模块或像这样创建新模块。
public class GwtModule implements EntryPoint {
@Override
public void onModuleLoad() {
// exportable class
DialogBoxManager dbm = new DialogBoxManager();
// export all Exportable classes of module
ExporterUtil.exportAll();
// needed cause JS_API will be available only after the GWT is loaded
onLoad();
}
// call when GWT module loaded
private native void onLoad() /*-{
$wnd.loaded();
}-*/;
DialogBoxManager 看起来像这样
@Export
@ExportPackage("pkg")
public class DialogBoxManager implements ClickHandler, Exportable {
private DialogBox db;
public DialogBoxManager() {
this.db = new DialogBox();
}
@Export("showDB")
public void showDialog() {
db.setVisible(true);
db.center();
db.show();
}
@Override
public void onClick(ClickEvent event) {
showDialog();
}
}
@Export("show")、@ExportPackage("pkg") 等注释中的字符串值将在我们的 JS_API 调用中用于带注释的 GWT 方法(您也可以导出字段)。您可以只使用@Export(就像我对DialogBoxManager 所做的那样)。
当 GWT 模块加载到您的 JS 库中时,您可以实现 JS_API 成员的初始化或您需要的
var dbManager = null;
...
function loaded() {
dbManager = new pkg.DialogBoxManager();
}
然后像这样调用 JS_API
function showDB() {
if (dbManager != null) {
dbManager.showDB();
}
}