我想使用 Elemental2 从 GWT 使用特定的本机 JavaScript 库 (DataTables)。 库的初始化 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"}
]
});
}-*/;
我是否缺少一种明显简单有效的方法来生成基于纯 Elemental2 的 Java 代码来实现此类本机接口?例如。我可以使用某种 Map 来填充我需要的参数并将其作为 JSON 字符串或其他东西传递吗?
参考一些有用的问题/答案——虽然没有合适的: (GWT - 在本地方法中直接使用 java bean 参数) (在 GWT 中使用第三方 javascript 库(带有窗口引用))
有一个叫做 Tabulator 的 JS 库,
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