dataTable的當前頁面重新整理draw操作
阿新 • • 發佈:2018-11-05
dataTable當前頁重新整理實現
talk is cheap,let’s show the code:
var table = $('#example').DataTable();
// Sort by column 1 and then re-draw
table.draw( false );
很簡單,將false引數傳入draw方法中即可實現當前頁重新整理。別問我怎麼知道的,這個問題曾經卡了我很長一段時間,直至後來想到,該框架的設計者肯定考慮到此類問題,必然也會給予解決方案,於是終於在官方文件中找到了想要的答案。我列個擦,想了好長時間的問題,竟然就是這樣.draw(false)簡單地解決了。
- 官方文件參考連結: dataTable drawAPI
當渲染表格時,想象一種場景。在table的20頁時,我們需要對錶格中的某一行資料執行一定的操作,譬如標記。標記這個操作會彈出一個模態框,操作執行完成並回到當前頁後,理想情況下,當前的這一行資料應該顯示最新更改後的資料。這是最正常不過的應用場景了。假如你用的不是框架整合的,嗯,你確實可以採取全域性變數記住當前頁的請求引數,然後再發一次請求。然而,假如你用的是dataTable做的分頁實現,那麼我告訴你,你有福了!
- 先貼出程式碼
var _table = $table.dataTable($.extend(true, {},
CONSTANT.DATA_TABLES.DEFAULT_OPTION, {
ajax: function (data, callback, settings) {//ajax配置為function,手動呼叫非同步查詢
//封裝請求引數
var param = userManage.getQueryCondition(data);
$.ajax({
type: "GET",
url: "/markMaster/listArray",
cache: false, //禁用快取
data: param, //傳入已封裝的引數
dataType: "json",
success: function (result) {
if (result.errorCode) {
alert("查詢失敗。錯誤碼:" + result.errorCode);
return;
}
var returnData = {};
returnData.draw = data.draw;
returnData.recordsTotal = result.total;
returnData.recordsFiltered = result.total;
returnData.data = result.pageData;
//呼叫DataTables提供的callback方法,代表資料已封裝完成並傳回DataTables進行渲染
//此時的資料需確保正確無誤,異常判斷應在執行此回撥前自行處理完畢
callback(returnData);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("查詢失敗");
}
});
},
columns: [
{
data: "id",
render: CONSTANT.DATA_TABLES.RENDER.ELLIPSIS
},
{
data: "mid",
render: CONSTANT.DATA_TABLES.RENDER.MID
},
{
data: "name",
render: CONSTANT.DATA_TABLES.RENDER.UNAME
},
{
data: "tag",
render: CONSTANT.DATA_TABLES.RENDER.TAG
},
{
data: "cooperateStatus",
render: CONSTANT.DATA_TABLES.RENDER.COOPERATE
},
{
data: "signStatus",
render: CONSTANT.DATA_TABLES.RENDER.SIGN
},
{
data: "mark",
render: CONSTANT.DATA_TABLES.RENDER.ELLIPSIS
},
{
data: null,
defaultContent: "",
orderable: false,
width: "120px"
},
{
data: null,
defaultContent: "",
orderable: false,
width: "120px"
}
],
"createdRow": function (row, data, index) {
if (data.role) {
$(row).addClass("info");
}
//給當前行某列加樣式
$('td', row).eq(3).addClass(data.status ? "text-success" : "text-error");
//不使用render,改用jquery文件操作呈現單元格
var edit = '<button type="button" class="btn btn-primary btn-edit">編輯</button>';
var $option = $('<div>'+edit+'</div>');
var $btnData = $('<button type="button" class="btn btn-small btn-primary btn-data">資料</button>');
$('td', row).eq(-1).append($option);
$('td', row).eq(-2).append($btnData);
var a = "";
}
})).api();
<!--組裝的查詢引數部分-->
getQueryCondition: function (data) {
var param = {};
//組裝排序引數
if (data.order && data.order.length && data.order[0]) {
switch (data.order[0].column) {
case 1:
param.orderColumn = "id";
break;
case 2:
param.orderColumn = "mid";
break;
case 3:
param.orderColumn = "name";
break;
case 4:
param.orderColumn = "tag";
break;
case 5:
param.orderColumn = "cooperateStatus";
break;
case 6:
param.orderColumn = "signStatus";
break;
case 7:
param.orderColumn = "mark";
break;
default:
param.orderColumn = "id";
break;
}
param.orderDir = data.order[0].dir;
}
//組裝查詢引數
param.openSearch = userManage.openSearch;
if (userManage.openSearch) {
param.uid = $("#uid").val();
param.nickName = $("#nickName").val();
param.tag = $("#tag").attr('item');
}
//組裝分頁引數
param.startIndex = data.start;
param.pageSize = data.length;
param.draw = data.draw;
return param;
}
顯然,請求引數是封裝在dataTable裡面的,我們要取出不難,但是想要在重新整理的時候再注入就很麻煩了.當初遇到這個檻時真是百思不得解。想過幾種解放方案都被自己給否定了,直到後來。。。直接在執行完操作程式碼的後面新增上_table.draw(false),然後你就可以實現執行完操作的當前頁重新整理了~喜大普奔