如何使用javascript将变量正确存储到窗口?
我尝试使用JSNI(gwt的JavaScript接口)设置/获取js object:window中的变量,如下所示:如何使用javascript将变量正确存储到窗口?,javascript,gwt,Javascript,Gwt,我尝试使用JSNI(gwt的JavaScript接口)设置/获取js object:window中的变量,如下所示: private final native <T> T get(String key)/*-{ return $wnd.key; }-*/; private final native void set(String key, Object value)/*-{ $wnd.key = value; }-*/; 如果我将变量var_1设置为window
private final native <T> T get(String key)/*-{
return $wnd.key;
}-*/;
private final native void set(String key, Object value)/*-{
$wnd.key = value;
}-*/;
如果我将变量var_1设置为window:
var var_1={"id":"id_1","name":"name_1"}
set("key_1",var_1)
然后
我将正确地得到var_1
然后将另一个变量var_2设置为window
var var_2={"id":"id_2","name":"name_2"}
set("key_2",var_2)
然后,再次尝试获取密钥_1
get("key_1")
意外地,将返回var_2
因此,问题很明显:get()函数将始终返回最后一个设置变量,无论键是什么。问题是:
1,Why?
2,How to make it right?
改为
private final native <T> T get(String key)/*-{
return $wnd[key];
}-*/;
private final native void set(String key, Object value)/*-{
$wnd[key] = value;
}-*/;
private final native T get(字符串键)/*-{
返回$wnd[key];
}-*/;
私有最终本机无效集(字符串键、对象值)/*-{
$wnd[key]=值;
}-*/;
现在就按预期设置和获取工作。您不需要处理JSNI,因为在
元素
类中已经有了一些有用的方法,所以只需将对象窗口强制转换为元素即可
此代码应适用于:
Element window=ScriptInjector.TOP_window.cast();
setPropertyJSO(“key_jso”,JsArray.createArray());
JavaScriptObject jso=window.getPropertyJSO(“key_jso”)
setPropertyBoolean(“key_boolean”,true);
布尔b=window.getPropertyBoolean(“键布尔”)
//与此相同:
//setPropertyDuble,getPropertyDuble
//setPropertyInt,getPropertyInt
//setPropertyString,getPropertyString
//setPropertyObject,getPropertyObject
如果您正在使用我建议在任何gwt项目中始终导入的库,您只需执行以下操作:
import static com.google.gwt.query.client.GQuery.*;
$(窗口).prop(“键”,值);
布尔b=$(窗口).prop(“键”);
//或
布尔b=$(window.prop(“key”,boolean.class);
//任何类型(JavaScriptObject、Double、Integer…)也是如此
您似乎已经证明,在JS中,点符号求精始终是文字,而通过“[]”运算符求精会导致变量分辨率。我不知道这个语言的细节-谢谢。
1,Why?
2,How to make it right?
private final native <T> T get(String key)/*-{
return $wnd[key];
}-*/;
private final native void set(String key, Object value)/*-{
$wnd[key] = value;
}-*/;