共计 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
正文完
发表至: javascript
2019-07-22