jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – 为什么在调用DataTable().draw()时column.render不执行?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我很困惑为什么 columns.render不包含在 DataTable().draw()的执行管道中.

一个例子:

HTML

<table id="data">
    <thead>
        <tr>
            <th>Timecolumn</th>
            <th>column 2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>123</td>
            <td>234</td>
        </tr>
        <tr>
            <td>345</td>
            <td>456</td>
        </tr>
        <tr>
            <td>567</td>
            <td>678</td>
        </tr>
    </tbody>
</table>

<button id="refresh">Refreh</button>

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不执行?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。