Проблема с эффективным сопоставлением 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