我正在为我的Backbone应用程序编写搜索功能,其想法是用户可以输入字符串,应用程序将搜索并返回字符串出现在其任何属性中的任何匹配模型。到目前为止,我有以下内容,
查看功能在keyup上运行,
this.results = this.collection.search(letters);
这将运行位于集合中的以下代码
search: function( filterValue ) {
filterValue = filterValue.toLowerCase();
var filterThroughValue = function(data) {
return _.some(_.values(data.toJSON()), function(value) {
console.log(value);
if(value != undefined) {
value = (!isNaN(value) ? value.toString() : value);
return value.toLowerCase().indexOf(filterValue) >= 0;
}
});
};
return App.Collections.filterCollection = this.filter(filterThroughValue);
}
无论如何运行,我都会收到以下错误,
未捕获的TypeError:undefined不是函数
此错误显示为行return value.toLowerCase().indexOf(filterValue) >= 0;
,无论是否使用我知道在集合模型中存在的字符串,都会返回此错误。
是否有解决此问题的方法,或者更好的方法是搜索并仅返回包含搜索字符串模型的模型?
答案 0 :(得分:1)
由于您只想要一个值的字符串表示,您可以检查value是否具有toString方法。请注意,String也有一个toString方法,因此如果value是一个String,这将有效。
return _.some(_.values(data.toJSON()), function(value) {
if(value && value.toString) {
return value.toString().toLowerCase().indexOf(filterValue) >= 0;
}
return false;
}