主干筛选器集合,用于按名称返回模型

backbone filter collection to return models by name?

本文关键字:返回 模型 用于 筛选 集合      更新时间:2023-09-26

我正在尝试按模型属性(名称)过滤集合,

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"的所有模型。

但是,我有 2 个应该返回的模型,这些模型的名称是"abba"和"AAAS"。我假设没有返回"AAAS",因为我的搜索词是小写的,而型号名称是大写的,所以我添加了一个.toLowerCase()但它仍然只返回"abba"为什么?

根据_.filter的文档(Backbone 的Collection.filter使用它),你的filtered数组应该是空的 - 它应该只包含元素,这些元素是返回的真值 - 你的函数返回undefined这是假值。试试这个:

...
if(model.get('name').toLowerCase().indexOf(searchParam.toLowerCase()) !== -1) {
    model.trigger('show');
    return true;
} else {
    model.trigger('hide');
}
...

现在filtered应该包含所有name中带有searchParam的模型(不区分大小写)。