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);
});