1

我正在使用 GWT 构建一个 Web 应用程序,我希望让用户能够通过某种 Javascript API 来扩展其功能,该 API 将与用 GWT 编写的应用程序核心进行交互。基本上,这个 JS API 将映射到我的一些 GWT 内部方法,这些方法可以完成实际工作。

因此,为了实现这一点,我在 GWT JSNI 官方文档上阅读了一个技巧,该技巧包括从 GWT 创建一个全局 JS 变量并将其分配给实际 GWT 方法的调用。然后我会通过这个变量在我的手写 JS 代码中进行调用。

不幸的是,我无法使其工作(该示例包含语法错误,我不确定它是否已经过测试)。做更多的研究,我在这个网站上发现了一个类似的解决方案,它为 JS var 分配一个匿名函数来进行调用。它看起来像这样:

/*GWT code that assigns the anonymous function*/

private static native void loadWrapper() /*-{
    $wnd.showMessage =
        $entry(@com.Glob3Mobile.client.TestApi::msgBox());
}-*/;

public static void msgBox() {
    Window.alert("hello");
}

这个解决方案看起来很有希望,但我无法让它发挥作用。当我执行“window.showMessage();” 在我手写的 JS 代码中它不起作用。我发现了这些问题:

  • window.showMessage 似乎已创建,但 JS 控制台说它不是函数,即使我检查了 dom 树并验证变量确实包含函数。
  • 似乎我总是必须附加“窗口”。前缀,因为 var 是在 window 对象中创建的。这是一个相当令人担忧的问题,因为强迫用户每次想要调用函数时都这样写真的很乏味。

如果有人知道这些问题的解决方案(或实现我想要做的事情的替代方法),我将非常感激听到。提前致谢。

4

1 回答 1

1

你需要做一些额外的工作。因为您描述的方法仅在编译时有效。编译后 GWT 方法名称消失了,因为它们被混淆了。但是有一个库可以帮助您:gwt-exporter

于 2011-10-20T14:35:08.307 回答