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.

Reply via email to