GridManager 分页详解

GridManager分页,GridManager分页原理,GridManager如何分页,GridManager分页原理,GridManager,GridManager数据格式

拭目以待 发布于

GridManager 分页原理:

首先, 注意了: GridManager 表格分页是需要 后端支撑 的. 


以下几个步骤实现分页: 

1、由前端发送包含分页信息的参数, 这是由 GridManager 自动实现的。 该参数包含以下信息{cPage: 当前页, pSize: 每页显示条数}

2、后端解析请求, 并根据分页参数返回当前页的数据, 数据格式如下:

{
    "data":[ // 分页必须存在的属性, 属性名可通过配置项dataKey进行变更
        {
            "name": "baukh",
            "age": "28",
            "createDate": "2015-03-12",
            "info": "野生前端程序",
            "operation": "修改"
        },
        {
            "name": "baukh",
            "age": "28",
            "createDate": "2015-03-12",
            "info": "野生前端程序",
            "operation": "修改"
        }
    ],
    "totals": 8  // 分页必须存在的属性, 属性名可通过配置项totalsKey进行变更
}

3、前端通过返回数据自动渲染。


后端接收参数与 GridManager 不符怎么办?

1、打服为止,强势要求后端按前端规则修改接口(后端同学表示呵呵哒)

2、通过初始化配置参 requestHandler 对 GridManager 中使用的分页参数进行调整; 后端接到的参数将是调整后的参数,调整方式如下:

document.querySelector('table').GM('init', {
    supportAjaxPage: true, // 启用分页
    requestHandler: function(request){
        request.newParams = '这个参数是通过 requestHandler 函数新增的';
    },
    // 其它配置项...
});


后端返回数据不符怎么办?

1、仅返回字段名不符

如: 一级数据中的 data 与 totals, 可以使用 dataKeytotalsKey 进行调整。 

后端返回数据为:

{
    "list":[  // GridManager 期望返回的是 data, 而这里返回了 list
        {
            "name": "baukh",
            "age": "28",
            "createDate": "2015-03-12",
            "info": "野生前端程序",
            "operation": "修改"
        },
        {
            "name": "baukh",
            "age": "28",
            "createDate": "2015-03-12",
            "info": "野生前端程序",
            "operation": "修改"
        }
    ],
    "number": 8  // GridManager 期望返回的是 totals, 而这里返回了 number
}


解决方式:

document.querySelector('table').GM('init', {
    supportAjaxPage: true, // 启用分页
    dataKey: 'list', // 指定数组 key 为 list
    totalsKey: 'number', // 指定总数 key 为 number
    requestHandler: function(request){
        request.newParams = '这个参数是通过 requestHandler 函数新增的';
    },
    // 其它配置项...
});


2、后端返回数据与 前端期望返回的数据出入较大

如数组中的 createDate, 期望返回的是时间戳, 而返回的为字符串。 这时可以通过初始化配置 responseHandler 对数据进行重组。

后端返回数据为:

{
    "list":[  // GridManager 期望返回的是 data, 而这里返回了 list
        {
            "name": "baukh",
            "age": "28",
            "createDate": "2015-03-12", // 返回的是字符串
            "info": "野生前端程序",
            "operation": "修改"
        },
        {
            "name": "baukh",
            "age": "28",
            "createDate": "2015-03-12", // 返回的是字符串
            "info": "野生前端程序",
            "operation": "修改"
        }
    ],
    "number": 8  // GridManager 期望返回的是 totals, 而这里返回了 number
}

前端期望返回的是:

{
    "data":[
        {
            "name": "baukh",
            "age": "28",
            "createDate": 1426118400000,  // 期望返回时间戳
            "info": "野生前端程序",
            "operation": "修改"
        },
        {
            "name": "baukh",
            "age": "28",
            "createDate": 1426118400000, // 期望返回时间戳
            "info": "野生前端程序",
            "operation": "修改"
        }
    ],
    "totals": 8
}

解决方式:

document.querySelector('table').GM('init', {
    supportAjaxPage: true, // 启用分页
    dataKey: 'list', // 指定数组 key 为 list
    totalsKey: 'number', // 指定总数 key 为 number
    responseHandler: function(response){
        // 将返回数据中的 createDate 修改为 时间戳
        response.list = response.data.map(function(item){
            item.createDate = new Date(item.createDate).getTime();
            return item;
        });
    },
    // 其它配置项...
});


GridManager API

GridManager github