GWT JSNI возвращает JS-функцию

Как я могу вернуть функцию JavaScript из JSNI в GWT? Я попробовал это следующим образом:

/* 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

Кто-нибудь знает, как решить эту проблему?

2 ответа

Решение

Это работает для меня. Объявите эти методы:

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);

Давайте рассмотрим вас appName.nochache.js(GWT) в Homepage.html

в homepage.html

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

В вашем GWT:

В вашем источнике Gwt вы можете получить доступ к JS-функции sayHello () через JSNI:

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-методы любого расширенного файла, который нужно добавить на html-страницу с помощью <script> теги...

Другие вопросы по тегам