2013-08-17 4 views
0

Я пытаюсь отфильтровать коллекцию, в которой есть модели с некоторым вложенным объектом. К сожалению, мой результат всегда пуст.Backbone - попытка создать фильтр в коллекции с вложенным объектом

Так что мои модели вернулись в коллекции строят так:

model

Моя цель проста: У меня есть мнение со списком тегов и представления содержимого со всеми вопросами , Когда пользователь нажимает на тег, например, «C#», я хочу отфильтровать свою коллекцию, чтобы просто возвращать вопросы с тегом «C#»

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

У меня уже есть коллекция со всеми вопросами, поэтому зачем создавать новый звонок, фильтр - лучшее решение, о котором я думаю.

Но я не преуспел с моим фильтром, и я не знаю, можно ли это сделать. На данный момент я помещаю свой фильтр в свой маршрутизатор, потому что его легче протестировать.

я не могу сделать фильтр, как это потому, что у меня есть массив объектов

getQuestionsByTags: function(query) { 

     var test = this.questionsCollection.filter(function(model) { 
      return model.attributes.tags.name == query; 
     }) 
     console.log('result'); 
     console.log(test); 
    }, 

Так я думал, чтобы сделать петлю, но мой результат всегда пустой массив.

getQuestionsByTags: function(query) { 

     var test = this.questionsCollection.filter(function(model) { 
      _.each(model.attributes.tags, function(tag) { 
       return tag.name == query; 
      }) 
     }) 
     console.log('result'); 
     console.log(test); 
    }, 

Возможно, это просто, но я не знаю, что делать. Заранее спасибо :)

ответ

0

Я только что нашел решение, которое работает.

getQuestionsByTags: function(query) { 
     var flag; 
     var test2 = this.questionsCollection.filter(function(model) { 
      flag = false; 
      _.each(model.attributes.tags, function(tag) { 
       if(tag.name == query) { 
        flag = true; 
       } 
      }) 

      if(flag) { 
       return model.attributes; 
      } 
     }) 

     console.log('result'); 
     console.log(test2); 
    }, 

Я поставил флаг. Если он вернется внутри цикла, модель имеет этот тег, поэтому я возвращаю его. Я думаю, что это не очень условно, поэтому, если у кого-то есть другое решение, не стесняйтесь публиковать его :)

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