【发布时间】:2019-01-18 14:34:16
【问题描述】:
每当用户更改网格上的分页时,我都会将设置保存在 localStorage 中,并在用户再次导航到该页面时检索它以将其重新设置。为了检索它,我使用了 dataSource 的 pageSize 属性,我在其中传递了一个 IIF,如下所示:
pageSize: function () {
var pageSize = 10;
if (window.localStorage) {
var userPreferencePageSize = localStorage.getItem("somegridPageSize");
if (userPreferencePageSize === parseInt(userPreferencePageSize)) {
userPreferencePageSize = parseInt(userPreferencePageSize);
}
if (!isNaN(userPreferencePageSize)) {
pageSize = userPreferencePageSize;
}
}
return pageSize;
}()
这很有效,但要求用户能够将 pageSize 设置为“All”。 Kendo 在 Grid 中处理“All”,所以我认为这也可以让我将 dataSource pageSize 设置为字符串“All”(pageSize="All")。但是,当我这样做时,网格开始显示 X 记录的 NaN 并显示一个空网格。所以问题是..如何将数据源的 pageSize 预设为“全部”?
注意:另一种方法是只获取网格最大总数,然后用 jquery text("All) 替换下拉列表中显示的数字,但这看起来像一个黑客,在我看来这应该已经内置到框架,但我在文档中找不到任何内容。
编辑:这变得更有趣了。由于缺少其他选项,我像在注释中那样实现了它,只是直接设置了 dataSource pageSize:
$("#Grid").data("kendoGrid").dataSource.pageSize(pageSize);
但这会导致网格上的过滤器出现故障并从端点抛出“字符串格式不正确”(误导性错误)错误。经过足够的研究,我发现它是由 DataSourceRequest 在后台执行一些无法识别的 shuru buru 引起的。由于设置 dataSource pageSize 会导致问题,我尝试以编程方式设置下拉菜单并让 kendo 触发更新 pageSize 本身的请求,如下所示:
var selectBox = $(".k-pager-sizes").find("select");
selectBox.val(pageSize);
selectBox.find("option[value='" + pageSize + "']").prop('selected', true);
但是网格不允许我这样做,并且会不断从 javascript 恢复我在 DOM 中所做的任何更改。
所以问题是,到底如何才能从 javascript 更改服务器端剑道网格的 pageSize(触发对端点的额外请求)。
【问题讨论】:
-
能否发布您的完整网格定义,以便我们尝试重现该问题?
标签: javascript jquery kendo-ui pagination kendo-grid