使用KnockOutJs过滤

时间:2015-01-20 09:56:28

标签: string razor knockout.js filter

我需要在此处使用表格中的过滤器

<p>Filter: <input data-bind="value: filter, valueUpdate: 'afterkeydown'" /></p>

这是过滤器框。

<table class="tbl" data-bind="visible: current">
    <thead>
        <tr data-bind="click:Table">
            <th width="25%" data-column="Name">Name</th>
        </tr>
     </thead>
<tbody data-bind="foreach: Page">

        <tr>
            <td>                   
                <span data-bind='text: Name'>name</span>
            </td>
</tr>
</tbody>

这是将数据库中的名称绑定的表

var ModelsViewModel = function () {
    var self = this;
    self.Name = ko.observable("");
    self.filter = ko.observable("");
    self.List = ko.observableArray();

//---filter starts
    ModelsViewModel.filteredItems = ko.dependentObservable(function () {
        var filter = self.filter().toLowerCase();
        if (!filter) {
            return self.List;
        } else {
            return ko.utils.arrayFilter(self.List(), function (ManageList) {

                return ko.utils.stringStartsWith(List.Name.toLowerCase(), self.filter);

            });
        }
    }, ModelsViewModel);
    //-----------ends
  }

我们输入

时显示错误

TypeError: ko.utils.stringStartsWith is not a function

return ko.utils.stringStartsWith(List.Name.toLowerCase(), self.filt...

1 个答案:

答案 0 :(得分:10)

在Knockout 2.0版中删除了

ko.utils.stringStartsWith

另见github问题:ko.utils.stringStartsWith missing in release file #401

您可以创建和使用自己的startsWith方法(sampl代码取自链接的github问题):

var stringStartsWith = function (string, startsWith) {          
    string = string || "";
    if (startsWith.length > string.length)
        return false;
    return string.substring(0, startsWith.length) === startsWith;
};

你的方法就是这样:

return ko.utils.arrayFilter(self.List(), function (ManageList) {

    return stringStartsWith(List.Name.toLowerCase(), self.filter);

});