未捕获的TypeError:undefined不是knockout中的函数

时间:2014-12-08 18:39:38

标签: javascript jquery knockout.js

我试图在下面的代码的帮助下,通过敲除为每个绑定生成一个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));
            });
        });

我不确定我哪里出错了。

1 个答案:

答案 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 functions that you'll have to invokenamenew 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);