【问题标题】:Kendo Grid misbehaving in certain situations with Durandal/RequireJS在 Durandal/RequireJS 的某些情况下,Kendo Grid 行为不端
【发布时间】:2015-11-11 06:53:14
【问题描述】:

背景

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

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

我的网站上有很多 Kendo Grids,都运行良好。直到现在,也就是……当我开始集成 Durandal

问题

95% 的网格非常好,但其中有 2 个是从 OData v3 操作(POST 操作)获取数据。例如:

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

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

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,

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

【问题讨论】:

  • 您的代码 cmets 声明您在本地进行分页。我想问题就在那里。我们可以看看你是如何实现的吗?
  • @Brett,嗨.. 是的,我必须用这个在本地进行分页,因为 OData 操作不会将 odata.count 返回到不是实体的集合(请参阅我的帖子:stackoverflow.com/questions/31822755/…) .那里的逻辑没有改变..在使用 Durandal/RequireJS 之前,本地分页运行良好..再一次,除此之外没有任何区别..所以不确定发生了什么。
  • 如果不提供我们可以查看的可以重现问题的小提琴,则无法猜测。我问看看你是如何在本地实现分页的。您如何告诉网格它在哪个页面上或要跳过多少条记录? serverPaging 设置为什么?等等。
  • @Brett、serverPaging、serverFiltering 和 serverSorting 设置为 false。另外值得注意的是,我通过设置schema.total 来获得项目总数,如下所示:total: function (data) { return data.value.length; },。这一直工作得很好..完全没有问题..直到我开始使用 Durandal。
  • @Brett,请看我上面的编辑。我现在知道是什么原因造成的,但我不知道为什么。

标签: requirejs kendo-grid odata durandal durandal-2.0


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这不再是问题,因为 OData 5.7 现在为返回复杂类型集合的操作/函数返回 @odata.count。之前我关闭了服务端分页和过滤。。只是把客户端上的所有数据都拿到了,不喜欢,但是没办法。。。现在可以用服务端分页了,不用管了关于这个奇怪的问题了。有关 OData 修复的更多信息请点击此处:https://github.com/OData/WebApi/issues/484#issuecomment-153929767

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多