我正在尝试按模型属性(名称)
过滤集合byName: function(searchParam) {
var filtered = this.filter(function(model){
console.log(model.get('name').toLowerCase());
console.log(searchParam.toLowerCase());
if(model.get('name').toLowerCase().indexOf(searchParam.toLowerCase()) !== -1) {
model.trigger('show');
} else {
model.trigger('hide');
}
});
}
我遇到一个小问题,我现在的搜索参数只是" a"。因此,它应该返回所有名称为" a"在它。
但是我有两个应该返回的模型,这些模型的名称是" abba"和" AAAS"。我假设" AAAS"因为我的搜索字词是小写的,并且模型名称是大写的,所以我没有返回,所以我添加了.toLowerCase()
但它仍然只返回" abba"为什么呢?
答案 0 :(得分:1)
根据_.filter
(Backbone的Collection.filter
使用它)的文档,您的filtered
数组应该为空 - 它应该只包含谓词返回的元素truthy值 - 你的函数返回undefined
这是假值。试试这个:
...
if(model.get('name').toLowerCase().indexOf(searchParam.toLowerCase()) !== -1) {
model.trigger('show');
return true;
} else {
model.trigger('hide');
}
...
现在filtered
应该包含searchParam
name
的所有模型(不区分大小写)。