骨干过滤器集合按名称返回模型?

时间:2016-02-07 16:02:55

标签: javascript backbone.js backbone-collections

我正在尝试按模型属性(名称)

过滤集合
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"为什么呢?

1 个答案:

答案 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的所有模型(不区分大小写)。