具有与字符串匹配的属性的模型的骨干搜索集合

时间:2015-05-15 11:33:22

标签: javascript backbone.js backbone-collections backbone-model

我正在为我的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;,无论是否使用我知道在集合模型中存在的字符串,都会返回此错误。

是否有解决此问题的方法,或者更好的方法是搜索并仅返回包含搜索字符串模型的模型?

1 个答案:

答案 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;
}