【问题标题】:Filter/Search a collection based on 2 attributes根据 2 个属性过滤/搜索集合
【发布时间】:2023-04-03 22:21:02
【问题描述】:

我正在尝试使用 2 个搜索参数搜索集合。目前我只能通过 1 个搜索参数进行搜索,这是我的工作单参数搜索。

search: function(filterValue) {
    var filterValue = filterValue.toLowerCase();
    var matcher = new RegExp(filterValue);
    var found_models = this.filter(function(model) {
        return matcher.test(model.get('name').toLowerCase());
    });

    return found_models;
},

有没有办法搜索名称以外的其他属性,我想可能是这样的,

search: function(filterValue) {
        var filterValue = filterValue.toLowerCase();
        var matcher = new RegExp(filterValue);
        var found_models = this.filter(function(model) {
            return matcher.test(model.get('name').toLowerCase());
        });
        var found_models = this.filter(function(model) {
            return matcher.test(model.get('clients').get('name').toLowerCase());
        });

        return found_models;
    },

但这些只是覆盖与 name 参数匹配的任何结果。

【问题讨论】:

  • found_models 是一个数组吗?看来您需要合并结果。

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


【解决方案1】:

诀窍在于返回filter。如果您返回 true,则该模型将添加到输出中。这意味着您可以在过滤器函数中进行任何类型的匹配,甚至是双重匹配!

所以代码应该是这样的:

var found_models = this.filter(function(model) {
    return matcher.test(model.get('name').toLowerCase()) && matcher.test(model.get('clients').get('name').toLowerCase());
});

这将得到true && true,这将使true 成为您的回报。

【讨论】:

    【解决方案2】:

    类似where 的方法?

    var friends = new Backbone.Collection([
      {name: "Athos",      job: "Musketeer"},
      {name: "Porthos",    job: "Musketeer"},
      {name: "Aramis",     job: "Musketeer"},
      {name: "d'Artagnan", job: "Guard"},
    ]);
    
    var musketeers = friends.where({job: "Musketeer"});
    
    alert(musketeers.length);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2014-09-22
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      相关资源
      最近更新 更多