Sunday, November 2, 2014

How to use javascript to store variables to window correctly?

I am trying to use JSNI to set/get variable to/from js object:window like this:

private final native <T> T get(String key)/*-{      return $wnd.key;  }-*/;      private final native void set(String key, Object value)/*-{      $wnd.key = value;  }-*/;

and if I set a variable: var_1 to window:  (the definition of IdNameImpl is listed in the end)

IdName var_1=IdNameImpl.create("id_1","name_1");  set("key_1",var_1);

then

get("key_1")

I will get var_1 correctly

and then set another variable var_2 to window

IdName var_2=IdNameImpl.create("id_2","name_2");   set("key_2",var_2)

then,try to get key_1 again

get("key_1")

unexpectedly,var_2 will be returned

so,the problem is obvious:the get() method will always return the last set variable no matter what key is.Questions are:

1,Why?  2,How to make it right?
Blow is definition of IdNameImpl
public class IdNameImpl extends JavascriptObject implements IdName  {      public static final IdName create(String Id,String Name)/*-{          var o=new Object();            o.Id=Id;          o.Name=Name;            return o;      }-*/;        protected IdNameImpl()      {      }        @Override      public final native String getName()/*-{          return this.Name;      }-*/;          @Override      public final native void setName(String Name)/*-{          this.Name = Name;      }-*/;        @Override      public final native String getId()/*-{          return this.Id;      }-*/;          @Override      public final native void setId(String Id)/*-{          this.Id = Id;      }-*/;  }

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment