> package xxx;
>
> import jsinterop.annotations.JsFunction; 
>
> @JsFunction 
> public interface Callback { 
>     void call(Object event); 
> }
>

If the JS library does not pass totally different JS objects into the 
callback but instead something that is worth defining as a class you can 
use void call(BroadCastEvent event) instead of using Object and define 
BroadCastEvent (or whatever name you choose) using the approach shown by 
Vassilis.

If the JS library passes in different kinds of JS objects then there needs 
to be some sort of discriminator property so you can check in Java which 
kind of Js object you have received, e.g. { messageType: 'BROADCAST' }. 
Then you could make this property available through JsInterop and use it to 
check the event type and hard cast it into one of the native JsTypes you 
have defined (one per messageType value). I think there is also a util 
method for casting in jsinterop.base library.

If the callback input is totally random, then it might be better to define 
a native JsType with just a getProperty(String name) JsOverlay method that 
delegates to a JSNI util method or an appropriate method in elemental.base 
library. In that case it is more a map like object.

In any case if you feel like you would need to use JSNI for something then 
first check the jsinterop.base library if it already has the util method 
you are looking for, because these methods will also work in J2CL if you 
will ever use it. If you can not find the method you need in jsinterop.base 
library then I think it is better to make a small utility JS library on 
your own and make it accessible through JsInterop instead of using JSNI.

-- J.

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to