de acuerdo con lo que dice en la lata , Datatables debería poder "retener la selección de filas durante una recarga de datos". Pero no puedo hacer que funcione cuando uso datos de ajax.
Así es como hago mi tabla:
oTable = $('#fileList').DataTable({ select: true, "ajax": { "url": "./data.php", "type": "GET" }, rowId: 'Index', "createdRow": function (row, data, dataIndex) { $(row).addClass(data[2]); //set formatting from data[2] } });Siguiendo las instrucciones de la referencia anterior, inicialmente usé esto para actualizar la tabla cada cinco segundos:
setInterval(function () { oTable.ajax.reload(); }Pero cualquier fila seleccionada se deseleccionaría cada cinco segundos. Así que intenté ser más explícito: cargar las filas seleccionadas en una matriz y volver a seleccionarlas dentro de la función setInterval:
setInterval(function () { var selectedRows = []; //put all the selected rows into an array: sel = oTable.rows('.selected').every(function (rowIdx) { selectedRows.push(rowIdx); }); oTable.ajax.reload(); console.log(selectedRows); //select all the rows from the array for (var i = 0; i < selectedRows.length; i++) { console.log("selecting ",selectedRows[i]); oTable.rows(selectedRows[i]).select(); } }, 5000) });en la Consola si tengo una fila seleccionada (en este ejemplo la tercera fila) veo:
Array [ 2 ] selecting 2 Lo cual es como se esperaba, pero las filas no se vuelven a seleccionar. Si oTable.rows(2).select(); en la consola, selecciona la tercera fila como debería, pero no funciona desde el bloque setInterval .
Supongo que puede tener algo que ver con la propiedad rowID. He definido la tabla en HTML así:
<table id="fileList" class="display"> <thead> <tr> <th>Index</th> <th>Status</th> <th>Owner</th> </tr> </thead> </table>y los datos provienen de un script php que devuelve una matriz como
{"data":[["1", "foo", "bar"], ["2", "fuz", "baz"]}donde el primer elemento es el índice.
Parece que el problema puede estar ocurriendo debido a la falta de claves en los datos devueltos. ¿Ha intentado devolver los datos como una matriz asociativa similar a:
"data": [ { "index": 1, "status": "Foo", "owner": "Bar" } ]A continuación, puede intentar reemplazar:
rowId: 'Index',con:
rowId: 'index',