0

Я пытаюсь найти коллекцию, используя 2 параметра поиска. В настоящее время я только ищу поиск по 1 параметру поиска, вот мой рабочий поиск одиночных параметров.Фильтр/Поиск коллекции по 2 признакам

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; 
    }, 

, но это просто перезаписать результаты, которые совпадают с параметром имя.

+0

Обнаружили массив? Похоже, вам нужно совместить результаты. –

ответ

0

Что-то вроде 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); 
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 вашему возвращению.

Смежные вопросы