外部javascript给出一个应该移交给命名的Java方法的数字mycallback.
我已经定义:
Java的:
class MyClass {
public static void mycallback(JavaScriptObject number) {
// do something with the number
}
}
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
$wnd.callback = $entry(@com.package.MyClass::mycallback(Lcom/google/gwt/core/client/JavaScriptObject));
Run Code Online (Sandbox Code Playgroud)
而Javascript调用是:
$wnd.callback(number_from_external_javascript);
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
JS value of type number, expected com.google.gwt.core.client.JavaScriptObject
Run Code Online (Sandbox Code Playgroud)
我的最终目标是使用参数类型为java的java方法Integer,而不是JavascriptObject.我只是认为GWT应该在JavascriptObject中包装javascript对象,但它似乎不会.
GWT版本是2.4.
GWT将自动投一个JS Number值到任何Java数原始类型(int,double等),JS字符串到Java String和JS布尔到Java boolean.它永远不会像JavaScriptObjects 一样传递它们.
如果数字不能为null,则只需使用int参数声明回调.如果它可以为null,那么您将必须显式创建一个Integer实例,如:
$wnd.callback = $entry(function(n) {
if (number != null) {
// box into java.lang.Integer
number = @java.lang.Integer::valueOf(I)(n);
}
@com.packge.MyClass::mycallback(Ljava/lang/Integer;)(number);
});
Run Code Online (Sandbox Code Playgroud)
或者,我认为你可以传递一个JS数字,JavaScriptObject如果它是一个Number对象而不是Number值,所以这可能有效:
$wnd.callback = $entry(function(n) {
n = new Number(n); // "box" as a Number object
@com.packge.MyClass::mycallback(Lcom/google/gwt/core/client/JavaScriptObject;)(n);
});
Run Code Online (Sandbox Code Playgroud)