Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript将变量正确存储到窗口?_Javascript_Gwt - Fatal编程技术网

如何使用javascript将变量正确存储到窗口?

如何使用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

我尝试使用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:

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;
}-*/;