jQuery DataTable 刪除或更新數據後從新加載

轉自:http://www.cnblogs.com/Rexcnblog/p/6444686.htmljavascript


問題描述:html


利用jQuery Datatable和artTemplate組合來作的表格。可是當刪除數據時,須要從新加載table裏的數據。可是問題是datatable並無直接的從新渲染,反而給數據累加上了。java


解決辦法:ajax


通過查看高人的blog,發現能夠先銷燬table,而後再從新渲染。app


var dttable;ide

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

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

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

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

        "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){  <!--k is name ,v is path memo id -->
                           
html_text = '<tr><td >'+v.id+'</td><td><a href="javascript:void(0)"><img id='+v.id+' src="/'+v.path+k+'.thumb" onclick="OpenModal2(this)"></a></td>';
                           html_text = html_text+'<td>'+ v.memo+'</td>';
                           html_text = html_text+ '<td id="tag'+v.id+'">'+ v.tag_name+'</td>';
                           html_text = html_text+'<td>';
                           {% if cur_user_group == 'photo_admin' %}
                           html_text = html_text+'<button type="button" class="btn btn-primary btn-sm" onclick="OpenModal1(this);">修改</button>&nbsp;&nbsp;';
                           html_text = html_text+'<button type="button" class="btn btn-primary btn-sm" onclick="DelPhoto(this);">刪除</button>';
                           {% endif %}
                           html_text = html_text+'</td></tr>';
                           $("#phototable tbody").append(html_text);

                       });
                       loaddatatable();  //從新加載table}                    });                }        }
相關文章
相關標籤/搜索