使用KnockOutJs过滤

SAT*_*SAT 3 string filter razor knockout.js

我需要在这里使用表中的过滤器

<p>Filter: <input data-bind="value: filter, valueUpdate: 'afterkeydown'" /></p>
Run Code Online (Sandbox Code Playgroud)

这是过滤器盒.

<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>
Run Code Online (Sandbox Code Playgroud)

这个表将从数据库绑定名称

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
  }
Run Code Online (Sandbox Code Playgroud)

它在我们完成输入时显示错误

TypeError: ko.utils.stringStartsWith is not a function

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

nem*_*esv 10

ko.utils.stringStartsWith 已在Knockout 2.0版中删除.

另请参阅此github问题:版本文件#401中缺少ko.utils.stringStartsWith

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

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

而你在你的方法中:

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

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

});
Run Code Online (Sandbox Code Playgroud)