Проблема с эффективным сопоставлением API-интерфейса переменных параметров собственной библиотеки JavaScript с помощью Elemental2/GWT?

Я хочу использовать специальную собственную библиотеку JavaScript (DataTables) от GWT с помощью Elemental2. API инициализации для библиотеки имеет тип:

      $('#example').DataTable({
        paging: false,
        ordering: false,
        info: false,
        columnDefs:
                [
                    { targets: [2,3], orderable: false },
                    { targets: [0], width : "150px" },
                    { targets: [3], width : "90px"}
                ]
    });

Принятые параметры инициализации весьма разнообразны, обширны и необязательны.

Вот как я сначала пытался отобразить это - это сработало, но довольно утомительно реализовать.

      @JsType(isNative = true,name = "DataTable", namespace = JsPackage.GLOBAL)
public class DataTable
{
    public DataTable(String selector, FeatureOptions options){}
    public native Api clear();
    public native Api draw();
    // and so on...
}


@JsType(isNative = true, name = "Object", namespace = JsPackage.GLOBAL)
public class FeatureOptions
{
    public String  scrollY;
    public boolean scrollCollapse;
    public boolean paging;
    public boolean searching;
    // and so on...
}

В какой-то момент я вернулся к JSNI... особенно из-за сложного типа "columnDefs" (для этого потребовалось бы много дополнительных классов).

      public native void drawTable(String tableID)/*-{
        var table = $wnd.$('#'+tableID).DataTable({
                searching : false,
                "columnDefs":
                [
                    { targets: [2,3], orderable: false },
                    { targets: [0], "width" : "150px" },
                    { targets: [3], "width" : "90px"}
                ]
            });
    }-*/;

Я упустил очевидный простой и эффективный способ создания чистого Java-кода на основе Elemental2 для реализации таких нативных интерфейсов? Например, могу ли я использовать какую-то карту, чтобы заполнить только те параметры, которые мне нужны, и передать их как строку JSON или что-то в этом роде?

Для справки некоторые полезные вопросы/ответы - ни один из них не подходит:(GWT - использование параметра java bean непосредственно в собственном методе )(Используйте стороннюю библиотеку javascript (со ссылками на окна) в GWT )

1 ответ

Существует JS-библиотека Tabulator.

https://tabulator.info/docs/4.9/columns

у него довольно сложные параметры конфигурации, и кто-то сделал для него интерфейс GWT JsInterop:

https://github.com/peruncs/gwt/tree/master/gwt-tabulator/src/main/java/com/peruncs/gwt/tabulator

То, как это было сделано, может иметь сходство с тем, что вам нужно сделать.

Другой подход заключается в использованииJsPropertyMapобъекты: https://github.com/google/jsinterop-base/blob/master/java/jsinterop/base/JsPropertyMap.java

Другие вопросы по тегам