转自:http://www.cnblogs.com/Rexcnblog/p/6444686.html


问题描述:


利用jQuery Datatable和artTemplate组合来做的表格。但是当删除数据时,需要重新加载table里的数据。但是问题是datatable并没有直接的重新渲染,反而给数据累加上了。


解决办法:


经过查看高人的blog,发现可以先销毁table,然后再重新渲染。


var dttable;

App.globalAjax("get", "/Order/MyJsonList", {}, function (result) {

  var html = template('Orders-template', result);

   $("#datatable1").find("tbody").html(html);

   dttable = $('#datatable1').dataTable({

        "sPaginationType": "bs_full"

   });

});



这个是第一次通过ajax获取到数据,然后利用artTemplate来渲染数据,最后填充到页面中,然后进行渲染。


接下来就是执行删除操作,然后重新加载渲染table



App.globalAjax("post", "/Order/DeleteOrder", data, function (result) {

            App.globalAjax("get", "/Order/MyJsonList", {}, function (result) {

                var html = template('Orders-template', result);

                if ($('#datatable1').hasClass('dataTable')) {

                    dttable = $('#datatable1').dataTable();

                    dttable.fnClearTable(); //清空一下table

                    dttable.fnDestroy(); //还原初始化了的datatable

                }

                $("#datatable1").find("tbody").html(html);

                $('#datatable1').dataTable();

            });

        });


到此,datatable就可以重新渲染了。


-------------------------------------------

这里的关键就是

dttable.fnClearTable(); //清空一下table

dttable.fnDestroy(); //还原初始化了的datatable

$('#datatable1').dataTable();


在我的实际项目中,上面是选择条件,下面显示结果,当条件变化时,这时需要将datatable里的数据重新载入,如果不能,显示的结果会出错,采用上面的方法就解决了这个问题

首先,定义一个函数

    

function loaddatatable(){
           $('#phototable').dataTable({
               "aoColumnDefs": [
                   {"bSearchable": true, "bVisible": true, "bSortable": true, "aTargets": [2,3]},
                   {"bVisible":false,"aTargets":[0]},
                   {"bSortable": false, "aTargets": [1,4]}
{#                    {"bSortable": false, "aTargets": [9, 10]}#}
               
],
               "bAutoWidth": false, //自适应宽度
               
"aaSorting": [[0, "desc"]],
               "sPaginationType": "full_numbers",
               "oLanguage": {
                   "sProcessing": "正在加载中......",
                   "sLengthMenu": "每页显示 _MENU_ 条记录",
                   "sZeroRecords": "对不起,查询不到相关数据!",
                   "sEmptyTable": "表中无数据存在!",
                   "sInfo": "当前显示 _START_ 到 _END_ 条,共 _TOTAL_ 条记录",
                   "sInfoFiltered": "数据表中共为 _MAX_ 条记录",
                   "sSearch": "当前结果内搜索",
                   "oPaginate": {
                       "sFirst": "首页",
                       "sPrevious": "上一页",
                       "sNext": "下一页",
                       "sLast": "末页"
                   
}
               }
           })
       }

    

在页面载入后就调用一次这个函数

  window.onload = function (){loaddatatable()};


条件变化后重新获取数据时,清空table,初始化datatable,然后再次调用datatable

    

        function getPhoto(){
           if(tag_list.length == 0 ){
               alert ("请选择标签");
               return false;
             }else{
               $("#choice :checkbox").prop('checked',false);
               $.ajax({
                   url: "/photo/search/",
                   type: "post",
                   data: {"tag_list":JSON.stringify(tag_list)},
                   success: function (ret) {
                       tag_list = [];
                       ret = JSON.parse(ret);
                       html_text = '';
                       $("#phototable tbody").empty();
                       
otable = $('#phototable').dataTable();
                       
otable.fnClearTable(); //清空一下table

                       
otable.fnDestroy();//还原初始化了的datatable

                       $.each(ret,function(k,v){  
                           
html_text = ''+v.id+''.thumb" onclick="OpenModal2(this)">';
                           html_text = html_text+''+ v.memo+'';
                           html_text = html_text+ 'id+'">'+ v.tag_name+'';
                           html_text = html_text+'';
                           {% if cur_user_group == 'photo_admin' %}
                           html_text = html_text+'  ';
                           html_text = html_text+'';
                           {% endif %}
                           html_text = html_text+'';
                           $("#phototable tbody").append(html_text);

                       });
                       loaddatatable();  //重新加载table
                       
}
                   });
               }
       }