数据表 - 设置`bDeferRender:true`后强制渲染

时间:2014-05-21 13:31:31

标签: jquery datatables jquery-datatables

我有一张包含1000多条记录的表格,我正在使用bDeferRender: true。我有一个按钮,点击后可以选择任何记录。 Here is a jsfiddle showing the issue。这是代码:

the_data = [['1', '1', '1'], ['2', '2', '2'], ['3', '3', '3'], ['4', '4', '4'], ['5', '5', '5'], ['6', '6', '6'], ['7', '7', '7'], ['8', '8', '8'], ['9', '9', '9'], ['A', 'A', 'A'], ['B', 'B', 'B'], ['C', 'C', 'C'], ['D', 'D', 'D'], ['E', 'E', 'E'], ['F', 'F', 'F'], ['G', 'G', 'G'], ['H', 'H', 'H'], ['I', 'I', 'I'], ['J', 'J', 'J'], ['K', 'K', 'K'], ['L', 'L', 'L'], ['M', 'M', 'M'], ['N', 'N', 'N'], ['O', 'O', 'O'], ['P', 'P', 'P']];
    $(document).ready(function () {
        var oTable = $('#the_table').dataTable({
            "aaData": the_data,  
            "bDeferRender": true,
            "aoColumns": [
                { "mData": "Year", "sTitle":"Year" },
                { "mData": "Month", "sTitle":"Month"},
                { "mData": "Savings", "sTitle":"Savings"  },
        ]
        });

        $('#btn1').on('click', function() { 
            //output: 10
            alert($('#the_table').dataTable().fnGetNodes().length);
            //how to do this??
            forceRender();
            //this should now output 25
            alert($('#the_table').dataTable().fnGetNodes().length);
        });

    });

如果我使用bDeferRender: false,那么$('#the_table').dataTable().fnGetNodes().length将等于25.我想推迟表格的渲染,但是当点击按钮时,我希望表格实际上是所有记录。

2 个答案:

答案 0 :(得分:2)

根据DataTables论坛中的post,没有方法可以直接强制渲染表中的所有行。作为解决方法,您可以设置显示长度以显示所有行(然后将呈现所有行),然后将其设置回来。

var settings = table.fnSettings();
var oldDisplayLength = settings._iDisplayLength;
settings._iDisplayLength = -1;
table.fnDraw();
settings._iDisplayLength = oldDisplayLength;
table.fnDraw();

答案 1 :(得分:0)

我发现最好使用fnGetData()代替fnGetNodes(),因为它会返回所有记录。我认为fnGetNodes()用于特定于html表的操作(例如样式)。