0

我一直在尝试通过 JSNI 将值传递给 Javascript 方法,但它一直失败。

这种方法是否有效:

public static native JavaScriptObject getProductById(long pid) /*-{
    var productId = pid;
    var product = $wnd.products({id:productId}).first();    
    return product;
}-*/;

我可以说 JS 方法是正确的,因为如果我用一个常数值代替productId,我会得到正确的输出。

我错过了什么?

4

3 回答 3

4

JSNI 不允许long用作输入变量,请参阅此处的说明。

您可以尝试改用 double(甚至 int),但请确保您的 Javascript 代码支持它。

public static native JavaScriptObject getProductById(double pid) /*-{
    var productId = pid;
    var product = $wnd.products({id:productId}).first();    
    return product;
}-*/;
于 2013-03-19T08:21:11.570 回答
0

如果您确实需要将其作为 long 传递,则可以将其作为字符串传递,然后使用 parseFloat 进行转换。在这篇文章中有解释。

如何在 JavaScript 中将字符串转换为长字符串

于 2013-03-19T08:28:58.960 回答
0

如果您使用 gwtquery,您将拥有很好的实用方法,以避免在调用 js 函数或构建或读取 js 属性等大多数琐碎的事情上处理 JSNI。

 import static com.google.gwt.query.client.GQuery.*;
 ...

 Properties prd = JsUtils.runJavascriptFunction(window, "products", $$("id: 12345"));
 Properties ret = JsUtils.runJavascriptFunction(prd, "first");

 System.out.println(ret.toJsonString());
于 2013-03-19T20:03:12.693 回答