On Tue, Mar 31, 2015 at 2:30 PM, Julien Dramaix <[email protected]>
wrote:

> Dear GWT lovers,
>
> I've finally started to play with JsInterop in GWT 2.7 and mainly I'm
> trying to use JsInterop in order to write polymer components.
>
> So far, I have two questions:
>
> 1. I'm using super dev mode and so I'm obliged to use
> the CrossSiteIframeLinker. As the javascript code generated by GWT is
> loaded in an iframe, the exported types are not accessible from the main
> window (only from the iframe). The workaround I found to expose java type
> from the main window is to prefix my namespace by *$wnd*
>
> @JsNamespace("$wnd.jdramaix")
> public class AgeSliderImpl
>
> Isn't it a better way to do that ?
>
>
Yes, in 2.7 you need to use $wnd to expose your code to main window. In GWT
2.8 snapshot, this is the default behavior, you don't need $wnd.


> 2. I want to expose some java field of my class to javascript field. I'm
> trying to use @JsProperty for this purpose but it seems not to work:
>
> @JsNamespace("$wnd.jdramaix")
> public class AgeSliderImpl implements AgeSlider {
>   public int age;
>
>   @Override
>   public int getAge() {
>     return age;
>   }}
>
> @JsType
> public interface AgeSlider {
>   @JsProperty
>   int getAge();
>
> }
>
> If I try to access the field in the javascript console,it is undefined:
> > var slider = new jdramaix.AgeSliderImpl()
> > slider.age
> < undefined
>
> But the method getAge exists:
> > slider.getAge
> < function getAge_0_g$(){
> <   return this.age_3_g$;
> < }
> Same problem if I rename the method to age(). slider.age is defined by
> point to a function.
>
> Does @JsProperty work (at least when we export Java to Javascript) in GWT
> 2.7. ? If so how to use it ?
>
>
@JsProperty methods defined in @JsType that is implemented by concrete
classes does not work with GWT 2.7 (basically the scenario in your code
snippet), it doesn't generate the code with a javascript property
setter/getters.

In GWT 2.8 snapshot, javascript property setter/getter are still not
implemented (yet) but instead you can use @JsType with concrete class and a
public field, and you can skip the JsType interface completely.

i.e.

@JsType
public class AgeSlider {
  public int age;}

if you want to export the constructor, don't forget to add @JsExport as
well.

Thanks
>
> Julien
>
>  --
> You received this message because you are subscribed to the Google Groups
> "GWT Contributors" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/google-web-toolkit-contributors/CABb_3%3D6WZanScYy1ZqHBR23yssh9uvDLWe%3DquGaiixcpOusBog%40mail.gmail.com
> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/CABb_3%3D6WZanScYy1ZqHBR23yssh9uvDLWe%3DquGaiixcpOusBog%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/CAN%3DyUA2CSorYH4oHFzGsVrRD1cfnDM1n_jEOJ4upOYyeukm4eQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to