Comment puis-je renvoyer une fonction JavaScript de JSNI dans GWT? Je l'ai essayé de la manière suivante:
/* JSNI method returning a js-function */ public static native JavaScriptObject native_getFunction() /*-{ return function(a,b){ //do some stuff with a,b } }-*/;
Rangez la fonction dans une variable
/* outside from GWT: store the function in a variable */ JavaScriptObject myFunction = native_getFunction();
L'utilisation de la fonction produit ensuite le message d'erreur suivant:
(TypeError): object is not a function
Est-ce que quelqu'un sait comment résoudre ce problème?
Cela fonctionne pour moi. Déclarez ces méthodes:
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"); }-*/;
Ensuite, vous utilisez ces méthodes de cette façon:
JavaScriptObject func = native_getFunction(); invoke(func);
appName.nochache.js(GWT)
vous considérons appName.nochache.js(GWT)
dans Homepage.html
Dans la homepage.html
<script> function printMyName(name) { alert("Hello from JavaScript, " + name); } </script>
Dans votre Gwt:
Dans votre source Gwt, vous pouvez accéder à la fonction sayHello () JS via JSNI:
native void printMyNameInGwt(String name) /*-{ $wnd.printMyName(name); // $wnd is a JSNI synonym for 'window' }-*/;
Vous pouvez les attribuer à des variables aussi
native void printMyNameInGwt(String name) /*-{ var myname =$wnd.printMyName(name); // return that for your purposes }-*/;
Remarque: si vous appelez une méthode js de tout fichier exterenal qui devrait être ajouté à votre page html avec les balises <script>
…