4

如何从 GWT 中的 JSNI返回 JavaScript函数?我尝试了以下方式:

/* JSNI method returning a js-function */
public static native JavaScriptObject native_getFunction() /*-{
    return function(a,b){
        //do some stuff with a,b
    }
}-*/;

将函数存储在变量中

/* outside from GWT: store the function in a variable */
JavaScriptObject myFunction = native_getFunction();

之后使用该函数会产生以下错误消息:

(TypeError): object is not a function

有人知道如何解决这个问题吗?

4

2 回答 2

6

这对我有用。声明这些方法:

public static native JavaScriptObject native_getFunction() /*-{
    return function(a,b){
        //do some stuff with a,b
    }
}-*/;

private native void invoke(JavaScriptObject func)/*-{
    func("a", "b");
}-*/;

然后,您以这种方式使用这些方法:

JavaScriptObject func = native_getFunction();
invoke(func);
于 2013-02-05T18:38:01.563 回答
0

让我们考虑appName.nochache.js(GWT)Homepage.html

homepage.html

<script>
    function printMyName(name) {
        alert("Hello from JavaScript, " + name);
    }
    </script>

在您的 Gwt 中:

在您的 Gwt 源代码中,您可以通过 JSNI 访问 sayHello() JS 函数:

native void printMyNameInGwt(String name) /*-{
  $wnd.printMyName(name); // $wnd is a JSNI synonym for 'window'
}-*/;

您也可以将它们分配给变量

native void printMyNameInGwt(String name) /*-{
  var myname =$wnd.printMyName(name); // return that for your purposes
}-*/;

注意:如果您正在调用任何外部文件的 js 方法,这些文件应该使用<script> 标签附加到您的 html 页面上......

于 2013-02-05T19:01:43.073 回答