String 使用KnockOutJs进行筛选

String 使用KnockOutJs进行筛选,string,razor,knockout.js,filter,String,Razor,Knockout.js,Filter,我需要使用表中的过滤器 <p>Filter: <input data-bind="value: filter, valueUpdate: 'afterkeydown'" /></p> 当我们完成输入时,它显示错误 TypeError:ko.utils.StringStartWith不是函数 返回ko.utils.stringStartsWith(List.Name.toLowerCase(),self.filt…ko.utils.stringStartsWi

我需要使用表中的过滤器

<p>Filter: <input data-bind="value: filter, valueUpdate: 'afterkeydown'" /></p>
当我们完成输入时,它显示错误

TypeError:ko.utils.StringStartWith不是函数


返回ko.utils.stringStartsWith(List.Name.toLowerCase(),self.filt…

ko.utils.stringStartsWith
已在淘汰版2.0中删除

另请参见此github问题:

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

你可以用你的方法来实现它:

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

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

});

@SAT我不太理解你的评论…但重点是你可能已经看到了一些旧的示例代码,因为
ko.utils.stringStartsWith
不再存在于Knockout中,你必须编写自己的方法。请注意,从3.4版开始,
ko.utils.stringStartsWith
仍然存在于
Knockout-3.4.0.debug.j中s
文件,以及编译版本中不存在的一系列其他与字符串相关的函数。我认为@Soulriser有道理。使用Knockout 3.4,我在生产服务器上部署应用程序后才遇到这个问题。它在开发过程中工作得很好。我不得不使用Javascript的
startsWith()
string方法。
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
  }
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);

});