【发布时间】:2016-03-02 20:01:08
【问题描述】:
我有一个指向外部 API 的 jqGrid,我无法控制它。这个外部 API 有两个端点:
- 数据 Endpoint - 返回表格行数据
- Count Endpoint - 返回分页计数等,
根据用户输入,jqGrid 过滤器被转换为适当的查询字符串,以过滤外部 API 的 Data 和 Count 端点。
我有 jqGrids url 基于用户输入动态构建并以 Data 端点为目标...在 loadBeforeSend() 事件期间它调用 Count根据用户过滤器获取最新分页信息的端点。
我正在使用 jsonreader 功能:
jsonReader: {
root: 'products',
id: 'id',
records: function () {
return gridTotal;
},
total: function () {
// var totalPages = (gridTotal + reqOptions.limit-1) / reqOptions.limit;
var totalPages = Math.ceil(gridTotal / reqOptions.limit);
console.log('totalPages: ' + totalPages);
return totalPages;
},
page: function () {
//var totalPages = Math.ceil(gridTotal/20);
console.log('currentPage: ' + reqOptions.page);
return reqOptions.page;
}
},
loadBeforeSend 方法示例:
loadBeforeSend: function (xhr, settings) {
settings.url = _newUrl || endpointURL;
// Lets fetch our data count...this may change as items get published so lets fetch during load
products.count(accessToken, _filterQuery)
.success(function (resp) {
// This is the total number of products that match our current search
gridTotal = resp.count;
}).catch(function (err) {
console.error(err);
});
}
从 Data 端点获取效果非常好,问题是如何调用 Count 端点并更新分页数据。
尝试了以下方法:
- 将
setGridParam用于记录、last_page 等, - 使用
getGridParam('reccount') - 只需更新 html 以使其看起来正确(无效,因为分页将关闭)
有没有办法
- 为 jqgrid URL 手动触发 XHR...这样我就可以先请求 Count,当它返回时再去获取数据?
- Count 返回并设置
gridTotal后重新运行 jsonreader 功能 - 使用类似 promise 的结构来解析记录数
更新以显示@Oleg 解决方案
loadBeforeSend: function (xhr, settings) {
settings.url = _newUrl || endpointURL;
// Lets fetch our data count...this may change as items get published so lets fetch during load
products.count(accessToken, _filterQuery)
.success(function (resp) {
// This is the total number of products that match our current search
gridTotal = resp.count;
gridTotal = resp.count;
grid.jqGrid('setGridParam', {
page: gridOpts.jsonReader.page(),
records: gridTotal,
lastpage: gridOpts.jsonReader.total()
});
grid[0].updatepager(false, true);
}).catch(function (err) {
console.error(err);
});
}
【问题讨论】:
标签: javascript jqgrid