Monday, October 26, 2015

Re: JsInterop: Casting native javascript objects in gwt

Ahhh, I just realized that the new annotations are in a different package, jsinterop.annotations instead of com.google.gwt.core.client.js :)

/Brian

Den mandag den 26. oktober 2015 kl. 12.18.21 UTC+1 skrev Brian Pedersen:
I am using GWT 2.8.0-SNAPSHOT, but the new annotations does not work for me.

I tried using @JsType(namespace = "acme", name = "MyJavaScriptObject"), as described in the new version of the JsInterop document, but apparently the namespace and name attributes are not there in the jar file.
Same thing with the @JsExport and @JsNamespace, I currently have to use them or things stop working.

My gwt-user-2.8.0-SNAPSHOT.jar, which contains the annotations, is from today.


/Brian
 
Den mandag den 26. oktober 2015 kl. 11.43.32 UTC+1 skrev Thomas Broyer:
You may want to use GWT 2.8.0-SNAPSHOT and the new JsInterop annotations; as your usecase maybe is just not supported with the "old" annotations.

On Monday, October 26, 2015 at 11:10:28 AM UTC+1, Brian Pedersen wrote:
I have a dispatch method, exposed through JsInterop, which can take various kinds of payloads.

Once called from native javascript, I need to cast the payload, but this doesn't quite work as I would like it too.

Here is a simplified example.

GWT:
@JsExport
@JsType
@JsNamespace("foo")
public class Dispatcher {
public String dispatch(String action, Payload payload){
if("action1".equals(action))
return dispatchWithCast(payload);
return "Unknown action: " + action;
}
public String dispatchWithCast(Payload payload){
ConcretePayload w = (ConcretePayload) payload;
return w.foo;
}
}

@JsExport
@JsType
public class Payload {}

@JsExport
@JsType
public class ConcretePayload extends Payload {
public String foo;
public int bar;
}

Javascript:
var test = new foo.Dispatcher();
alert("Dispatch: " + test.dispatch("action1", {"foo": "a", "bar": 2})); // Uncaught java.lang.ClassCastException

Everything works just fine if I replace the Payload type in the Dispatcher class with ConcretePayload, and removes the cast.

I guess this this may be beyond the capabilities of the transpiler, I just need to figure out an alternative approach.

Any ideas?

(By the way, I am using the sso linker.)

--
You received this message because you are subscribed to the Google Groups "GWT Users" 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