GridManager-分页详解

41次阅读

共计 2296 个字符,预计需要花费 6 分钟才能阅读完成。

GridManager 分页原理:

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

以下几个步骤实现分页:

  • 由前端发送包含分页信息的参数,这是由 GridManager 自动实现的。该参数包含以下信息 {cPage: 当前页,pSize: 每页显示条数}
  • 后端解析请求,并根据分页参数返回当前页的数据,数据格式如下:
{
    "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 进行变更
}
  • 前端通过返回数据自动渲染。

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

  • 打服为止,强势要求后端按前端规则修改接口(后端同学表示呵呵哒)
  • 通过初始化配置参 requestHandler 对 GridManager 中使用的分页参数进行调整;后端接到的参数将是调整后的参数,调整方式如下:
document.querySelector('table').GM('init', {
    supportAjaxPage: true, // 启用分页
    requestHandler: function(request){
        request.newParams = '这个参数是通过 requestHandler 函数新增的';
        return request;
    },
    // 其它配置项...
});

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

仅返回字段名不符

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

后端返回数据为:

{
    "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 函数新增的';
        return request;
    },
    // 其它配置项...
});

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

如数组中的 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;
        });
        return response;
    },
    // 其它配置项...
});

更多 API,请点击 API 进入

欢迎 star github

正文完
 0