dojo增强了网格服务器端分页无法正常工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dojo增强了网格服务器端分页无法正常工作相关的知识,希望对你有一定的参考价值。

尝试使用增强型数据网格(dojo v1.10)执行服务器端分页时,我遇到了一个问题。第一页正确显示,但是小部件(store?grid?plugin?)似乎忽略了响应中的'Content-Range'标头值,并且不允许获取下一页。例如,响应标题包含“Content-Range:items 0-9 / 17”,分页显示“10个项目中的1到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进行响应后处理。

以上是关于dojo增强了网格服务器端分页无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

ag 网格服务器端分页“当网格位于绘制行的中间时,无法让网格绘制行”

具有服务器端分页/排序的 DevExtreme 数据网格不适用于过滤

剑道网格服务器端过滤和不工作

剑道网格服务器端分页

使用 WebAPI 对 ng-grid 进行服务器端分页+过滤+排序

Kendo Grid中的服务器端分页?