【发布时间】: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