5

这是 html 中的呼叫者按钮示例:

<input type='button' value='Call' onclick='Test()'>

以下是我尝试过的一些功能,但没有奏效:

<script type="text/javascript">
    function Test() {
        com.tests.client.Test_GoogleWeb_JSNI::Callee()();
    }
</script>

但是我们无法调用 Callee()。我们如何实现这一点?我的意思是我们如何从 javascript 调用 JSNI 函数?

帮助将不胜感激。

4

3 回答 3

8

这很容易。您需要“导出”用 GWT 编写的函数(或者它可以是另一个 JSNI)函数。

以下是相关文档:http ://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#calling

所以在你的情况下:

在您的 GWT 代码中:

public static void Caller() /*-{ 
   ... 
}-*/

public static native void exportStaticMethod() /*-{
   $wnd.Callee =
      $entry(@com.tests.client.Test_GoogleWeb_JSNI::Callee());
}-*/;

然后你exportStaticMethod()在某个地方调用,甚至在你的 onModuleLoad 中。<< 你必须这样做

然后您可以Callee()从您的手写 javascript 代码中调用。

您的按钮代码:

<input type='button' value='Call' onclick='$wnd.Callee();'>
于 2012-02-14T13:19:31.143 回答
1

对于 chrome,如果我将 onclick='$wnd.Callee() 更改为 onclick='window.Callee(),则上述解决方案有效。Chrome 的浏览器控制台告诉我们 $wnd 没有定义。$wnd 是如何在 JSNI 中访问浏览器的 window 对象。

对不起,我不能把这个作为评论(分数不够)

于 2014-12-18T15:48:45.207 回答
0

这里

  1. 确保Test_GoogleWeb_JSNI.Callee()static.
  2. 将 Callee() 函数分配给窗口对象。
于 2012-02-14T13:14:05.157 回答