jqGrid 设置记录数
jqGrid set records count
我有一个指向外部 API 的 jqGrid,我无法控制它。这个外部 API 有两个端点:
- 数据端点-Returnstable行数据
- 计数端点-Returns分页计数等,
基于用户输入,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 的 XHR URL...所以我可以先请求计数,当它 returns 然后去获取数据?
- 设置计数 returns 和
gridTotal
后重新运行 jsonreader 功能
- 使用类似承诺的结构来解析记录数
已更新以显示@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);
});
}
希望我正确理解了你的问题。在这种情况下,您可以先从 Data 端点加载主要数据。然后(在 loadComplete
内)您可以手动启动 new $.ajax
请求以从 Count 端点获取数据并更新 $.ajax
.
的 success
回调中的分页数据
更新寻呼机需要做的是:
- 根据从 Count 端点返回的数据设置 jqGrid 的
page
、records
和 lastpage
参数。
- 调用
$("#grid")[0].updatepager(false, true);
将使用上述选项并刷新寻呼机上的信息。
您可以在 the old answer 和 .updatepager(false, true)
的用法示例中看到。
我有一个指向外部 API 的 jqGrid,我无法控制它。这个外部 API 有两个端点:
- 数据端点-Returnstable行数据
- 计数端点-Returns分页计数等,
基于用户输入,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 的 XHR URL...所以我可以先请求计数,当它 returns 然后去获取数据?
- 设置计数 returns 和
gridTotal
后重新运行 jsonreader 功能 - 使用类似承诺的结构来解析记录数
已更新以显示@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);
});
}
希望我正确理解了你的问题。在这种情况下,您可以先从 Data 端点加载主要数据。然后(在 loadComplete
内)您可以手动启动 new $.ajax
请求以从 Count 端点获取数据并更新 $.ajax
.
success
回调中的分页数据
更新寻呼机需要做的是:
- 根据从 Count 端点返回的数据设置 jqGrid 的
page
、records
和lastpage
参数。 - 调用
$("#grid")[0].updatepager(false, true);
将使用上述选项并刷新寻呼机上的信息。
您可以在 the old answer 和 .updatepager(false, true)
的用法示例中看到。