将数据添加为数组时如何指定行的id

How to specify the id for a row when adding data as an array

我需要能够将一个 ID 与我 table 中的每一行相关联,以便我可以在稍后阶段进行查找。我使用 row.add() 方法动态添加行。但是行添加只有一个数据参数,在我的例子中它只是一个单元格数组:

table.row.add( ["Tiger Nixon", 32, "System Architect"] );

如何指定 ID?

我看到此要求以两种方式之一处理(或其中一种方式的一些变体)。

这两种方式都涉及在每个行数组(或对象)中提供 ID 的源数据。因此,例如,如果 Tiger Nixon 的数据来自数据库中的“雇员”table,则假定该值是记录的主键。

假设本例中的ID为1234...

1) 将 ID 值放在隐藏列中

var table = $('#example').DataTable( {
  "columnDefs": [
    {
      "targets": [ -1 ], // the final column in the table
      "visible": false,
      "searchable": false
    }
} );

table.row.add( ["Tiger Nixon", 32, "System Architect", 1234] );

2) 将 ID 作为属性放在 <tr> 元素中

var rowData = ["Tiger Nixon", 32, "System Architect", 1234];
var rowID = rowData.pop();

var row = table.row.add( rowData ).draw();
$( row.node() ).attr( 'data-record-id', rowID );

这可能是一个完全没有必要的脚注,但以防万一:

您不能依赖 DataTables 来提供持久的 ID。它确实为每一行分配了唯一的索引值,但这适用于 DataTable 的一个实例。该值不会在 table 的不同创作中持续存在 - 因此不能保证“老虎尼克松”将始终被分配相同的索引号。

如果您的数据源还没有(或无法提供)唯一 ID,那么您可以在使用 GUID generator 或类似的东西创建行时自己生成一个 ID,然后添加该值到用于创建行的数据数组。但是在这里,您必须再次确保在使用“Tiger Nixon”数据的每种情况下都一致地使用您生成的 ID。我认为这可能具有挑战性,或者不可能。