在 jquery DataTables 中跳过渲染行

Skipping a row from rendering in jquery DataTables

如果在初始化期间满足条件,我想跳过行渲染,但是我不知道将它放在哪里。

我应该把它放在fnCreatedRow还是fnPreDrawCallback
我该怎么做?

这是我的代码:

 var users_tbl =$('#users_tbl');
    users_tbl.DataTable({
        "deferRender": true,
        "autoWidth": false,
        //for reinitialisation purpose
        destroy: true,
        "aLengthMenu": [[20, 40, 50, 100, -1], [20, 40, 50, 100, "All"]],
        "order": [[ 0, "DESC" ]],
        "ajax" : {
                url :  Main.Vars.host + "settings/get_users",
                type : "GET",
            },
            "aoColumnDefs": [

                    { "sWidth": "5%", "aTargets": [ 0 ] },
                    { "sWidth": "20%", "aTargets": [ 1 ] },
                    { "sWidth": "25%", "aTargets": [ 2 ] },
                    { "sWidth": "15%", "aTargets": [ 3 ] },
                    { "sWidth": "5%", "aTargets": [ 4 ] },
            ],
           "fnCreatedRow"  : function( nRow, aData, iDataIndex ){
                $(nRow).addClass('item-context');   

               return false;
            },
            "fnPreDrawCallback": function( oSettings ) {
                console.log(oSettings);
            },
            "columns": [
                { 
                    "data": "id",
                },
                { 
                    "data": "username",
                },  
                {
                   "render": function(data,type,row,meta) {
                        var owner = row.pnp_info.first_name + " " + row.pnp_info.last_name;
                        return owner;
                   }  
                },
                {
                    "data": "created_on",   

                },
                {
                   "render": function(data,type,row,meta) {
                        return row.active == 1 ? "YES" : "NO";
                   }  
                },

            ],

            sPaginationType: "full_numbers",
    });

对于 fnCreatedRow 来说为时已晚,而对于 fnPreDrawCallback 而言,您最终只是取消了 table 的渲染。你有两种不同的方式:

1) 在 ajax.dataSrc 回调中清理 JSON :

var table = $('#example').DataTable( {
    ajax : {
        url : 'test.json',
        dataSrc: function(json) {
            var rows = [];
            for (var i=0;i<json.data.length;i++) {
                //skip rows "if a condition is met"
                //here just any rows except row #1
                if (i>0) rows.push(json.data[i]);
            }
            return rows;
        }
    }
    ....
})    

2) 在 xhr 事件后清理 JSON:

table.on('xhr.dt', function (e, settings, json, xhr) {
    //manipulate the json directly, no return needed
    //delete row #1, same as above
    json.data.splice(0,1);
});

这两个示例都假设您在(简化)形式

上的 JSON 格式正确
{
 "data": [
     {
       "id": "2423",
       "username" : "joe"
     },
     {
       "id": "4321",
       "username" : "gordon"
     }
  ]
}