1. 程式人生 > >dataTable的當前頁面重新整理draw操作

dataTable的當前頁面重新整理draw操作

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)簡單地解決了。

當渲染表格時,想象一種場景。在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),然後你就可以實現執行完操作的當前頁重新整理了~喜大普奔