datagrid - dojo 增强的网格服务器端分页不起作用
问题描述
尝试使用增强的数据网格(dojo v1.10)执行服务器端分页时遇到问题。第一页正确显示,但小部件(存储?网格?插件?)似乎忽略了“Content-Range”标题值作为响应,并且不允许获取下一页。例如,响应头包含“内容范围:项目 0-9/17”,分页显示“1 到 10 个项目,共 10 个项目”,下一页不可用。
经过一些调试后,我看到从 JsonRest 存储(查询函数)中正确读取了范围值
results.total = results.then(function(){
var range = results.ioArgs.xhr.getResponseHeader("Content-Range");
return range && (range = range.match(/\/(.*)/)) && +range[1];
});
...
但在 ObjectStore 的 fetch 方法中,totalCount 值未定义,然后使用 results.length:
var results = this.objectStore.query(query, args);
Deferred.when(results.total, function(totalCount){
Deferred.when(results, function(results){
if(args.onBegin){
args.onBegin.call(scope, totalCount || results.length, args);
...
任何想法 ?
谢谢,
我的代码:
// get grid store
var restStore = new JsonRest(
{
target: "ks2/api/workflow/...",
});
var memoryStore = new Memory();
var store = Cache(restStore, memoryStore);
/*set up layout*/
var layout = [{
name: "id",
field: 'id',
width: '5%',
datatype:"string"
},
....
];
/*create a new grid*/
this.workflowGridWidget = new EnhancedGrid({
id: 'workflowGridWidget',
store: new ObjectStore({objectStore: store}),
structure: layout,
rowSelector: '20px',
plugins: {
pagination: {
pageSizes: ["10", "25", "50"],
defaultPageSize: 10,
description: true,
sizeSwitch: true,
pageStepper: true,
gotoButton: true,
maxPageStep: 4,//page step to be displayed
position: "bottom" //position of the pagination bar
}
}
});
/*append the new grid to the div*/
this.workflowGridWidget.placeAt("workflowDataGrid");
/*Call startup() to render the grid*/
this.workflowGridWidget.startup();
解决方案
我发现了问题:我使用的是非 dojo RESTful 兼容 API,我需要添加 JSON 响应后处理使用
aspect.after(store, "query", this.processResponse);
...
processResponse: function ks2ProcessMonitor_datagrid_WorkflowDataGrid_processResponse(deferred) {
return deferred.then(function(response) {
//process response content
return processedResponse;
});
},
这工作正常,但由于某种原因,它对分页有影响。删除这个后处理(使用另一个符合 dojo 的 API)修复了分页问题。也许我应该按照 Layke 的建议尝试使用 Observable 进行响应后处理。
推荐阅读
- node.js - Node-config:如何从配置中获取未冻结的数据?
- react-native - Webview 在 React native (expo) 中不显示任何内容
- c++ - 按另一个向量对向量进行排序
- microsoft-graph-api - 更新和删除日历事件而不向与会者发送通知
- reactjs - 在单选按钮上使用 useState 挂钩的正确方法
- sql-server - 使用来自 SQL UPDATE 查询的多个数据
- typo3 - TYPO3 8.7 自定义内容元素的后端字段未呈现
- azure - Azure 中单个自动化帐户的非工作时间多个启动/停止 VM 解决方案
- php - curl_multi 没有运行第二个请求
- javascript - 如何在 index.html 上的角度构建哈希文件中添加当前日期时间作为版本号