我试图在下面的代码的帮助下,通过敲除为每个绑定生成一个html表中的过滤器功能。
self.filteredStep1Records = ko.computed(function() {
return ko.utils.arrayFilter(self.step1BundleData(), function(bundle) {
self.pageNumber(0);
return (self.searchText().length == 0 || bundle.id.toLowerCase().indexOf(self.searchText().toLowerCase()) !== -1 || bundle.name.toLowerCase().indexOf(self.searchText().toLowerCase()) !== -1);
});
});
我收到错误了 "未捕获的TypeError:undefined不是函数"在以下行:
return (self.searchText().length == 0 || bundle.id.toLowerCase().indexOf(self.searchText().toLowerCase()) !== -1 || bundle.name.toLowerCase().indexOf(self.searchText().toLowerCase()) !== -1);
其余代码包括:
this.searchText = ko.observable('');
this.step1BundleData = ko.observableArray();
function bundle(id,name){
this.id = ko.observable(id);
this.name = ko.observable(name);
this.selected = ko.observable(false);
}
以下Ajax请求用于创建bundle:
getdata(8).done(function(data){
data = $.parseJSON(data);
$.each(data,function(index,value){
self.step1BundleData.push(new bundle(value.id,value.name));
});
});
我不确定我哪里出错了。
答案 0 :(得分:0)
被定义为ko.observable
s ...
function bundle(id,name){
this.id = ko.observable(id);
this.name = ko.observable(name);
this.selected = ko.observable(false);
}
...每个id
will be function
s that you'll have to invoke的name
和new bundle
来检索该值。
... || bundle.id().toLowerCase().indexOf(...
// ^^
与您调用self.searchText
以检索其值的方式类似:
return (self.searchText().length == 0 || ...
// ^^
function
本身没有toLowerCase()
方法。
console.log(typeof bundle.name); // 'function'
console.log(typeof bundle.name.toLowerCase); // 'undefined'
console.log(typeof bundle.name()); // 'string'
console.log(typeof bundle.name().toLowerCase); // 'function'
return (self.searchText().length == 0 || bundle.id().toLowerCase().indexOf(self.searchText().toLowerCase()) !== -1 || bundle.name().toLowerCase().indexOf(self.searchText().toLowerCase()) !== -1);