使用 Elemental2 / GWT 有效映射本机 JavaScript 库变量参数 API 时出现问题?

问题描述 投票:0回答:1

我想使用 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 库(带有窗口引用)

javascript java gwt gwt-jsinterop gwt-elemental
1个回答
0
投票

有一个叫做 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

© www.soinside.com 2019 - 2024. All rights reserved.