2

使用 kendo- kendo kendoGrid绑定过滤网格的适当方法是什么?

我目前正在通过将网格绑定到计算数组来过滤网格,使用此处显示的技术:KnockoutJS 中的实用函数- 请参阅“过滤数组”。

self.filteredItems = ko.dependentObservable(function() {

    var filter = self.filter().toLowerCase();
    if (!filter) {
        return self.items();
    } else {
        return ko.utils.arrayFilter(self.items(), function(item) {
             return item.name().toLowerCase().indexOf(filter) !== -1;
        });
    }
}, self);

这可行,但是如果您不在第 1 页上,它不会将网格重置为第 1 页,因此如果结果的“页数”少于您的搜索结果,则网格将是空白的,直到分页到第 1 页。

要查看问题,1. 转到此 JSFIDDLE - http://jsfiddle.net/xW9yc/11/ 2. 转到第 3 页 3. 在搜索输入中输入“P”

4

2 回答 2

3

您可以将对网格的引用存储在视图模型中的可观察对象中,如下所示:

function ViewModel() {
    // ....
     self.grid = ko.observable();
}

你的 HTML 将是

<div data-bind="kendoGrid: {data:filteredItems, pageable: { buttonCount: 5, pageSize: 5 }, widget: grid }" />

现在,一旦网格被实例化,你可以引用它self.grid()而不是$("#MyGrid").data("kendoGrid")- 它是你的视图模型和你的视图之间更松散的耦合,因为你不必硬编码一个 jQuery 选择器。

我已经更新了你的小提琴以反映这些变化。

您可以在本页widget底部的 Knockout-Kendo 文档中找到该选项的文档

于 2014-05-08T23:25:52.967 回答
1

如果您不反对使用 kendo javascript api,您可以执行以下操作:

var grid = $("#MyGrid").data("kendoGrid");
            if(grid)
            {
            grid.dataSource.page(1);
            }

[编辑 jsfiddle] ( http://jsfiddle.net/3CrMR/ )

希望这个对你有帮助!

于 2014-05-08T20:22:41.950 回答