Hi all,
This is a pretty common in the JS world, but take a look at this JS library 
<https://github.com/bevacqua/dragula>, which as part of its API has 
settings/options for configuration, where options are done with something 
with JS structure like:

*{*
*  ...*
*  isContainer: function (el) { return false; }, *
*  moves: function (el, source, handle, sibling) { return true; }, *
*}*



As you can see the callbacks have defaults that allows JS developers not to 
bother specifying them. Pretty neat! This is accomplished with code like:

function always () { return true; }
var o = options || {};
if (o.moves === void 0) { o.moves = always; }


Now, when I wrap such options object it in JsInterop:

*@JsType(isNative = true, name = "Object", namespace = JsPackage.GLOBAL)*
*class Options {*       
     

               ...
 

*    @JsProperty*
*    public CallbackRet1<Boolean, Object> isContainer;*

*    @JsProperty*
*    public CallbackRet4<Boolean, Object, Object, Object, Object> moves;*



             * /** We need this trivial defaults to be singletons */*

*    public static final CallbackRet1<Boolean, Object> DEFAULT_IS_CONTAINER 
= o->false;*
*    public static final CallbackRet4<Boolean, Object, Object, Object, 
Object> DEFAULT_MOVES = (o1,o2,o3,o4)->true;*


   * /** A factory methods to set the defaults. Uh-oh!*/*

             * @JsOverlay*

*    final static public Options createDefault() {*
*       Options o = new Options();*
*       o.isContainer = DEFAULT_IS_CONTAINER;*
*       o.moves = DEFAULT_MOVES;*
*       return o; *
*    }*

 

*}*


Do I have to provide defaults for callbacks and other properties?  As you 
can see my current approach leads to verbose code and the *getDeafult()* 
method that I would really like to avoid.
What happens if I leave the properties uninitialized? What will the JS API 
see with such partially supplied options - undefined or null?  I tried 
putting @JsOptional on all of these properties, but this annotations in not 
meant for members.


What is the best strategy to handle such cases with JsInterop?

Also, why is JsInterop  not allowing me to initialize the fields at 
declaration?

-- 
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