获取DataTables以在适当的列中输出对象数组

时间:2018-03-13 17:03:46

标签: json datatables

我正在研究化学品数据库网络应用程序。使用DataTables 1.10.16和CakePHP 3.5

Cake正在生成JSON提要。样本如下:

[
{
    "id": 1,
    "app_id": "ID000001",
    "name": "Chromium",
    "ecs": [
        {
            "id": 1,
            "value": "123-456-7"
        },
        {
            "id": 32,
            "value": "222-333-444"
        },
    ],
    "cas": [
        {
            "id": 1,
            "value": "987-654-3"
        }
    ]
},

]

对于某些化学品,有多个EC(JSON中为ecs)和CAS编号(JSON中为cas)。

我不知道是否/如何让DataTables遍历这些对象,并使用<br>标记之类的分隔符将它们输出到相应的列中。

我的表格标记如下:

<table id="substancesTable" class="table responsive display table-striped" cellspacing="0" width="100%">
    <thead>
        <tr>
            <th>Application ID</th>
            <th>EC Number</th>
            <th>CAS Number</th>
            <th>Chemical Name</th>
        </tr>
     </thead>
 </table>

在我的Javascript中,我这样做:

$('#substancesTable').DataTable({
    "processing": true,
    "serverSide": true,
    "searching": false,
    "ajax": { 
        "url" : "/get-substances.json",
        "method" : "POST",
        "dataSrc":""
    },
    "columns": [
        { "data": "app_id", "name" : "app_id" },
        { "data": "ecs", "name" : "ec_number" },
        { "data": "cas", "name" : "cas_number" },
        { "data": "name", "name" : "name" },
    ]
});

这适用于填充&#34;应用程序ID&#34;和&#34;化学名称&#34;列 - 但这是因为JSON中没有简单的1:1映射(没有数组/对象)。

&#34; EC编号&#34;的输出和&#34; CAS号码&#34; columns只是[object Object],并且重复了对象的数量。在上面的示例中,此化学品有2个EC编号,因此输出&#34; EC编号&#34;是[object Object],[object Object]

有人可以协助吗?我想通过循环我的JSON并在每个项目之间引入中断来生成输出,例如:

123-456-7<br>222-333-444

1 个答案:

答案 0 :(得分:1)

您将需要render这样的功能:

{
  "data": "ecs",
  "name": "ec_number",
  "title":"EC Number",
  "render": function(d,t,r){
    return d.map(function(e) {
        return e.value;
    }).join("<br/>");
  }
}

使用JSFiddle here