用knockoutjs过滤剑道网格的适当方法是什么?

时间:2014-05-08 18:25:53

标签: knockout.js kendo-ui kendo-grid knockout-kendo

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

我目前正在通过将网格绑定到计算数组来过滤网格,使用此处显示的技术:Utility Functions in 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页,所以如果页面数量较少,那么#34;结果比您的搜索最终结果,网格将一直空白,直到分页到第1页。

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

2 个答案:

答案 0 :(得分:3)

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

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选择器。

updated your fiddle反映了这些变化。

您可以在this page in the Knockout-Kendo documentation

底部找到widget选项的文档

答案 1 :(得分:1)

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

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

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

希望这有一些帮助!