延迟加载和自定义呈现

时间:2015-08-11 14:14:21

标签: jquery ajax datatables

我有一个使用服务器端处理的数据表。像这样:

var table = $('#example').dataTable( {
    "processing": true,
    "serverSide": true,
    "deferLoading": 50,
    "columnDefs": [
        {
            "name": "a.edit",
            "targets": 3,
            "render": function ( data, type, full, meta ) {
                return '<a class="btn btn-info" data-sid="'+data.id+'" href="'+data.url+'">Edit</a>';
            }
        }
    ]
});

如您所见,我的第3列是链接/按钮而不是原始文本。我从处理脚本返回的数据中收到ID和URL变量。

我的问题是我想绘制内置于模板的表的初始页面,而不是使用AJAX请求加载它(就像this) - 这就是我使用{{{ 1}}选项。第3列中的按钮是在我的模板中预先构建的。但是因为我使用了渲染选项,我在这些列中的HTML代码被覆盖了我在渲染选项中编写的代码。而且,由于我在初始模板中没有从AJAX请求返回数据变量,因此他们只获得deferLoading值。

我想要的是在我的初始页面中有列#34;未触及&#34;通过渲染选项 - 仅对AJAX请求(2-3-N页)中的数据应用该渲染参数。

1 个答案:

答案 0 :(得分:1)

尝试使用此代码,仅在data.id不是undefined时使用render,即成功的AJAX请求后。

var table = $('#example').dataTable( {
    "processing": true,
    "serverSide": true,
    "deferLoading": 50,
    "columnDefs": [
        {
            "name": "a.edit",
            "targets": 3,
            "render": function ( data, type, full, meta ){
                if(typeof data.id !== 'undefined'){
                    data = '<a class="btn btn-info" data-sid="'+data.id+'" href="'+data.url+'">Edit</a>';
                }

                return data;
            }
        }
    ]
});