我很困惑为什么columns.render不包含在DataTable().draw()的执行管道中.
一个例子:
HTML
jQuery的
$(document).ready(function () {
$('#data').DataTable({
columnDefs: [{
targets: 0,render: function(data,type,row,Meta) {
return data + ' time:' + Date.now();
}
}]
});
$('#refresh').on('click',function() {
$('#data').DataTable().draw();
});
});
单击“刷新”按钮时的预期结果是时间值应在第一列中前进,但事实并非如此.
初始化后永远不会调用指定的渲染函数.
(例子的jsFiddle.)
有没有解决方法或者我是否需要深入研究DataTables的代码?
最佳答案
我没有破坏数据表并重新填充它,而是最终修改了jquery.datatables.js版本1.10.2.
主要问题是jquery.datatables.js中的第1935行检查是否已经创建了行:
if ( aoData.nTr === null )
{
_fnCreateTr(oSettings,iDataIndex);
}
解决此问题的一个选项是设置aoData.nTr = null.但这可能会破坏其他功能或导致不必要的副作用,因此这不是一个可接受的解决方案.
我选择在.draw()函数中添加一个参数(第7137行)并添加一个名为bForceReDraw的设置(draw()已经接受了一个参数,所以我们添加了第二个参数):
_api_register('draw()',function (resetPaging,forceReDraw) {
return this.iterator( 'table',function ( settings ) {
settings.bForceReDraw = forceReDraw === true;
_fnReDraw(settings,resetPaging === false);
} );
} );
然后我将第1935行的空检查更改为:
if ( aoData.nTr === null || oSettings.bForceReDraw === true )
{
_fnCreateTr(oSettings,iDataIndex);
}
在函数_fnCreateTr()中,还有对nTr的空检查(第1586行),所以我也需要修改它:
if ( row.nTr === null || oSettings.bForceReDraw === true )
{
nTr = nTrIn || document.createElement('tr');
...
现在我们只需使用新参数调用draw(),一切都按预期工作.
$('#data').DataTable().columns.adjust().draw(false,true);
原文链接:https://www.f2er.com/html/426869.html
猜你在找的HTML相关文章