首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据:单元格中的下拉列表

数据:单元格中的下拉列表
EN

Stack Overflow用户
提问于 2020-03-17 13:03:37
回答 1查看 2.3K关注 0票数 0

我正在尝试用数据表生成一个表。

我从我的控制器收到一个json,这里有一个示例:

这个json可以更改(列数、列名),我可以用好的列数和好的名称构建我的表。

我的问题是:

当"liste“有一个数组,当它为null时,我如何才能有一个下拉列表?

有可能吗?

编辑:我忘了解释一些事情。我收到的Json是一个用来构建表的json,而不是填充它。因此,是否可以在数据在单元格中之前执行columnsDef。

编辑编号2:我使用了我接受的解决方案,但问题在于我的json。我试着派一个json去建房子,派一个json去填桌子。因此,我更改了json,并在json中发送选项列表,以填充表。

希望它能帮助其他人。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-17 15:49:17

以下是两种解决方案:

( 1)跌落。

( 2)使用格式化数组(作为替代)。

( 1)下坠

最终结果如下:

可数据的定义如下:

代码语言:javascript
复制
<script type="text/javascript">

  var dataSet = { "records" : [
    { "data" : "123456789",
      "liste" : null,
      "name" : "Nombre Enfants"
    },
    { "data" : "5678901234",
      "liste" : [ "Oui", "Non" ],
      "name" : "Transport"
    }]};

  $(document).ready(function() {
    $('#example').DataTable( {
        data: dataSet.records,
        columnDefs: [
          { targets: [ 0 ], 
            title: "Data", 
            data: "data" },
          { targets: [ 1 ], 
            title: "Liste", 
            data: function ( row ) {
              if (row.liste == null) {
                return null;
              } else {
                return buildDropdown(row.liste);
              }
            } },
          { targets: [ 2 ], 
            title: "Name", 
            data: "name" }
        ]
    } );

  function buildDropdown(data) {
    var dropdown = "<select>";
    for (var i = 0; i < data.length; i++) {
      var option = "<option value=\"" + data[i] + "\">" + data[i] + "</option>";
      dropdown = dropdown + option;
    }
    dropdown = dropdown + "</select>";
    return dropdown;
  }

  } );
</script>

它根据一个非空值是一个数组的假设构建了一个下拉列表。这在你的数据中可能并不总是如此--只是我的一个假设而已。

2)使用格式化数组

为了防止这也是有意义的,DataTables有一个格式化数组数据的内置语法,因此它显示在如下单元格中:

在这种情况下,您不再需要下拉构建器函数。除本部分外,其他一切均与备选案文(1)相同:

代码语言:javascript
复制
{ targets: [ 1 ], 
  title: "Liste", 
  data: "liste[, ]" },

具体来说,[, ]表示法允许您格式化数组数据。

我之所以提到这一点,只是因为它允许您显示单元格中的所有数组数据,而不是需要单击下拉列表。但这只是个建议。

您可能会发现,使用此选项进行搜索和排序等其他功能更好。

更新

这个问题澄清了,表需要根据JSON中提供的数据动态构建。

您可以将变量传递给可数据初始化器-例如:

代码语言:javascript
复制
var col1 = { targets: [ 0 ], title: "Data", data: "data" };
var col2 = { targets: [ 1 ], title: "Liste", data: "liste" };
var col2 = { targets: [ 2 ], title: "Name", data: "name" };
var dynamicCols = [ col1, col2, col3 ];

上面的col1变量定义了列的标题,列将在哪里(从dataSet.data字段)获取数据。

然后,dynamicCols变量可以在columnDefs中使用,如下所示:

代码语言:javascript
复制
$(document).ready(function() {
  $('#example').DataTable( {
    data: dataSet.records,
    columnDefs: dynamicCols
} );

但是,我不知道如何使用这种方法将函数包含在列中(例如,如果需要,可以将单元格的数据作为下拉列表)。

还有一些额外的技术可以用来使datatable更加动态,例如这里。没有看到提供更详细的JSON示例,我不确定是否还有其他建议可供参考。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60723013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档