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>
теги...