Kendo 网格在 Durandal/RequireJS 的某些情况下行为不当

Kendo Grid misbehaving in certain situations with Durandal/RequireJS

背景:

我有一个使用以下技术的现有站点:

ASP.NET MVC5,
KnockoutJS,
Kendo UI 2014.1.318
Web API 2
OData v3

我的站点上有许多 Kendo 网格,都运行良好。直到现在,那是...当我开始整合 Durandal.

问题:

95% 的网格都很好,但有 2 个网格从 OData v3 操作(POST 操作)获取数据。例如:

[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
[HttpPost]
public IQueryable<ServiceInfoResult> GetServices(ODataActionParameters parameters)
{
}

是的,这很不寻常,但出于我不会深入探讨的原因,我有来自 OData (POST) Action 的数据。网格通常工作正常,我只需要确保设置以下内容:

schema: {
    data: function (data) {
        return data.value;
    },
    total: function (data) {
        //return data["odata.count"]; // this is the one normally used for other grids, but not here...
        // instead, I need to use the following and do paging locally, which is fine, since there's a VERY small number of records, so there's no issue.
        return data.value.length;
    },
    //etc
}

无论如何,现在我正在使用 Durandal/RequireJS,有些奇怪的事情发生了...;第一次加载时一切看起来都很好,但是当单击页面(2、3、4 等...)时,网格会显示所有记录,即使在网格的页脚它仍然显示 showing 11-20 of 238 items 并有页码。

再一次,我说它之前工作正常。有谁知道为什么会发生这种情况以及我能做些什么吗?

更新

我刚刚发现了一些东西。对于我所有的网格,我在 viewModel 上使用 属性 来指定 gridPageSize。基本上,我是这样做的:

var ViewModel = function () {
    var self = this;

    self.gridPageSize = 10;
    //etc
    self.attached = function () {
        //etc
        self.gridPageSize = $("#GridPageSize").val(); //this is a hidden field I am using to get the page size which was set in admin area
        //etc
    }
    //etc

在网格配置中,我有:

pageSize: self.gridPageSize,
serverPaging: false,
serverFiltering: false,
serverSorting: false,
//etc

这适用于所有使用服务器端分页的网格。但是,此网格使用客户端分页。我现在所做的只是以下内容:

pageSize: 10,

现在它按预期工作了。这是一个很好的解决方法,但并不完美,因为我无法动态设置页面大小。关于这里发生的事情有什么想法吗?

您可以动态更改网格的 pageSize。您需要做的就是调用网格 dataSourcepageSize() 方法,它应该会按预期工作。

$('#grid').data('kendoGrid').dataSource.pageSize(100);

这不再是问题,因为 OData 5.7 现在 returns @odata.count actions/functions 返回复杂类型的集合。之前,我关闭了服务器端分页和过滤..只是在客户端获取所有数据,我不喜欢,但别无选择......但现在我可以使用服务器端分页,不需要关心关于这个奇怪的问题了。有关 OData 修复的更多信息:https://github.com/OData/WebApi/issues/484#issuecomment-153929767