jquery– 为什么在调用DataTable().draw()时column.render不执行?

jquery– 为什么在调用DataTable().draw()时column.render不执行?,第1张

概述我很困惑为什么columns.render不包含在DataTable().draw()的执行管道中.一个例子:HTML<table id='data'> <thead> <tr> <th>TimeColumn</th> <

我很困惑为什么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);
总结

以上是内存溢出为你收集整理的jquery – 为什么在调用DataTable().draw()时column.render不执行?全部内容,希望文章能够帮你解决jquery – 为什么在调用DataTable().draw()时column.render不执行?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1126598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)