转自: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> ';
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} }); } }