2017-01-10 99 views
1

我正在使用DataTables库创建具有额外功能的表。我想实现的是,用户可以选择行,然后按下按钮。这将调用服务器,做一些事情,行应该相应地更新。更新行后DataTable不会重新绘制

但是,在完成对要更改的行进行迭代并设置其值后,重新绘制表格并不实际更新其值。我更新数据对象,使缓存无效并致电table.draw()。这与this page上的最后一个例子非常相似。

我已创建JSFiddle此问题。该按钮更新所选行的日期对象,并重新绘制表格,但表格中的数据未更新。核心JS代码:

$('#updateRow').click(function() { 
    //Get the table 
    var table = $('#example').DataTable(); 
    //Iterate over selected rows 
    var rowData = table.rows({ 
     selected: true 
    }).every(function() { 
     //For every selected row, update startDate 
     var d = this.data(); 
     d.startDate = "01/01/2017"; 
     console.log('Set startDate of ' + d.name + ' to ' + d.startDate); 
     //Invalidate the cache 
     this.invalidate(); 
    }); 
    //Re-draw the table 
    table.draw(); 
}); 
+0

尝试使用“Destroy”:true –

+0

@IvanBarayev似乎没有什么区别可悲 – Jaims

回答

1

我分叉并从您的JsFiddle做了解决方案。下面是从小提琴https://jsfiddle.net/k38r9be5/1/

var rowData = table.rows({ 
    selected: true 
}).every(function(rowIdx) { 
    var colIdx = 4; // startDate is the fifth column, or "4" from 0-base (0,1,2,3,4...) 
    table.cell(rowIdx, colIdx).data('01/01/2017').draw(); 
}); 

基本上相关的片段,通过API,你可以得到的细胞对象本身,并与。数据修改的内容()。在你的版本中,你实际上并没有获得特定的单元格对象,而只是将该行的数据内容复制到一个变量中,并对其进行了修改。

+0

我发现如果数据表由所述数据支持,更新单元本身有点奇怪。特别是因为他们的文档中的示例还编辑数据并重新绘制。但它解决了这个问题!谢谢 – Jaims