使用服务器端处理时的自定义渲染

Custom rendering when using server side processing

我想知道是否可以修改 table 在收到 ajax 响应后的呈现。这似乎与此处描述的 render 函数有关:https://www.datatables.net/manual/orthogonal-data.

我的服务器returns数据喜欢

{
    "name":       
                       {
                        id: "123456",
                        value: "Tiger Nixon"
                        }
}

我想向每个名称单元格添加名称的 ID 作为 data-attribute 或作为 td 的 ID,并想为每个单元格添加一个 .on( "click", handler )

这可能吗?

提前致谢

您可以在返回的数据中使用 DT_RowDataDT_RowAttr(需要 DataTables 1.10.5 或更高版本)参数将属性分配给 <tr> 元素,稍后您可以在单击时检索该元素处理程序,请参阅手册中的 Server-side processing 章节。

您也可以使用 render 方法,但可能效果不佳。我在下面假设你的 name 列的索引是 0 并且你想设置 data-id 属性。

var table = $('#example').DataTable({
   "columnDefs": [{
      "data": "name.value",
      "targets": 0,
      "render": function ( data, type, full, meta ) {
         if(type === 'display'){
            $('#example').DataTable().cell(meta.row, meta.col).nodes().to$().attr('data-id', full['name']['id']);
         }

         return data;
      }
   }]
});

您可以使用以下代码添加点击事件处理程序:

$(document).ready(function(){
    var table = $('#example').DataTable({
       // Define DataTables initialization options here 
    });

    $('#example tbody').on('click', 'td', function(){

       // Use table to access various API function
       //
       // For example:
       // var data_cell = table.cell(this).data();

    });
});

这可以通过使用 columns.createdCell 函数来实现。

Gyrocode 的答案对于旧的 DataTables 版本是正确的。