Thanks Paul,

In retrospect this is obvious which means I would never figured it out by
myself :-)

I will test it tomorrow.

Shouldn't this trick documented in
https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0

Thanks again.


On Wed, May 11, 2016 at 6:54 PM, Paul Stockley <[email protected]> wrote:

> Declare your objects as
>
> @JsType(isNative = true, namespace=JsPackage.GLOBAL, name="Object")
>
> You can then just use new.
>
>
> On Wednesday, May 11, 2016 at 11:16:07 AM UTC-4, Vassilis Virvilis wrote:
>>
>> Hi,
>>
>>
>> I am trying to construct with jsinterop a json config object for
>> datatables. Here is an example
>>
>> var table = $wnd.$(table_selector).DataTable({
>>                 "dom" : 'lf<"dateRange"><"pull-right"B>rtip',
>>                 "serverSide" : true,
>>                 "ajax" : {
>>                     "url" : ajax_url,
>>                     "dataSrc" : "",
>>                     "data" : {
>>                         "date" : "date_range"
>>                     }
>>                 },
>>                 "columns" : headers,
>>                 "buttons" : [ 'copyHtml5' ]
>>             });
>>
>> The idea is to use something like that
>>
>>        @JsType(isNative = true)
>>         public static class Config {
>>
>>             @JsType(isNative = true)
>>             public static class Ajax {
>>
>>                 @JsType(isNative = true)
>>                 public static class Data {
>>                     String date;
>>
>>                     @JsOverlay
>>                     public static Data create() {
>>                         final Data data = createDataObject();
>>                         data.date = "date_range";
>>                         return data;
>>                     }
>>                 }
>>
>>                 String url;
>>                 String dataSrc;
>>                 Data data;
>>
>>                 @JsOverlay
>>                 public static Ajax create(String url) {
>>                     final Ajax ajax = createAjaxObject();
>>                     ajax.url = url;
>>                     ajax.dataSrc = "";
>>                     ajax.data = Data.create();
>>                     return ajax;
>>                 }
>>             }
>>
>>             String dom;
>>             boolean serverSide;
>>             Ajax ajax;
>>             JsArray<JavaScriptObject> columns;
>>             JsArrayString buttons;
>>
>>             @JsOverlay
>>             public static Config create(String url,
>>                     JsArray<JavaScriptObject> headers) {
>>                 final Config config = createConfigObject();
>>                 config.dom = "lf<'dateRange'><'pull-right'B>rtip";
>>                 config.serverSide = true;
>>                 config.ajax = Ajax.create(url);
>>                 config.columns = headers;
>>                 config.buttons = createJsArrayString("copyHtml5");
>>                 return config;
>>             }
>>         }
>>
>> Something similar (but simpler) is done for vue.js here
>> https://gist.github.com/bduisenov/2c5ef0e4ff4874f2c5d2
>>
>> Unfortunately the Datatables are picky and they are poking (iterating)
>> the Config object in the wrong way and they hit the __proto__ and
>> constructor members and the script crashes.
>>
>> So I had to specify  @JsType(isNative = true) to match the naming and a
>> way to start from a plain javascript plain object {}
>>
>> The question is how to create and cast in a generic way a {} in my native
>> objects i.e.
>> Config, Config.Ajax, Config.Ajax.Data?
>>
>> I tried
>> 1) Config config = new Config(); // protected empty constructor - fails
>> at runtime
>>
>> 2) Config config = createConfig();
>>
>>         private static native Config createConfigObject()/*-{
>>             return {};
>>         }-*/;
>>
>> This works but I have to create one static function for every native Type
>> I need to create;
>>
>> 3) Config config = createObject();
>>
>>         private static native <T> T createObject()/*-{
>>             return {};
>>         }-*/;
>>
>> fails at runtime
>>
>> 4) Config extends JavascriptObject and use .cast() - fails at compile time
>>
>> Is any of the 1, 3, 4 supposed to work?
>>
>>    Vassilis
>>
>>
>>
>>
>>
>>
>> --
>> Vassilis Virvilis
>>
> --
> 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.
>



-- 
Vassilis Virvilis

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