2013-03-19 105 views
0

我一直试图通过JSNI将值传递给Javascript方法,但它始终失败。通过JSNI将GWT值传递给Javascript

是这种方法有效:

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

我可以说的是,JS的方法是正确的,因为如果我把一个恒定值代替productId,我得到正确的输出。

我错过了什么?

+0

此外,我必须将参数从'长'更改为'长' – xybrek 2013-03-19 08:05:37

回答

4

JSNI不允许使用long作为输入变量,请参阅说明here

你可以尝试使用double(或者甚至是int)来代替,但是要确保你的Javascript代码支持它。

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

如果使用gwtquery,你将有很好的实用方法,以避免应对JSNI大部分琐碎的事情就像调用一个js函数,或用于建筑或阅读JS性能。

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