2013-09-24 3 views
0

Как я могу сделать группу элементов, фильтрованных для каждого продукта? Или Как я могу фильтровать элементы с данными из категорий?Магистральная группа. Или фильтровать?

var Categories = new Backbone.Collection(); 

Categories.add([ 
    { title: 'category 1', category_type: 'category 1' }, 
    { title: 'category 2', category_type: 'category 1' }, 
]); 

var Items = new Backbone.Collection(); 

Items.add([ 
    { title: 'Product 1', category: 'category 1' }, 
    { title: 'Product 2', category: 'category 1' }, 
    { title: 'Product 3', category: 'category 2' } 
]); 


var byFiltred = Items.groupBy('category'); 

var filtred = new Backbone.Collection(byFiltred['category 1']); 

console.log(filtred.pluck('title')); 

Спасибо за ваши мнения и ответы! Makromat

ответ

2

Это зависит от того, что вы хотите получить. .groupBy возвращает иерархический объект, а .filter (или просто .where) массив элементов, соответствующих вашим критериям.

Поэтому, учитывая при этом массиве:

var a = [ 
    { title: 'Product 1', category: 'category 1' }, 
    { title: 'Product 2', category: 'category 1' }, 
    { title: 'Product 3', category: 'category 2' } 
] 
_.groupBy(a, 'category'); 
/* returns 
    { 
     "category 1" : [ { title: 'Product 1', category: 'category 1' }, { title: 'Product 2', category: 'category 1' } ], 
     "category 2" : [ { title: 'Product 3', category: 'category 2' } ] 
    } 
*/ 

_.where(a, { 'category': 'category 1' }); 

/* returns 
    [ { title: 'Product 1', category: 'category 1' }, { title: 'Product 2', category: 'category 1' } ] 
*/ 

Чтобы отобразить иерархическое представление, как

category 1 
    product 1 
    product 2 
category 2 
    product 1 

Вы должны использовать .groupBy затем перебирает объект и отображение элементов в каждой категории:

example

+0

Так что мне нужно сделать вид с аккордеонным стилем, так что имя (вкладка) будет названием категории, а контент - сборником фильтрованных предметов. Поэтому мне нужно создать какой-то шаблон, который будет для каждой категории фильтрованных элементов на основе данных из коллекции категорий ... Вы знаете, что я имею в виду? надеюсь, это будет полезно не только для меня ... Еще раз спасибо – Makromat

+0

@Makromat посмотри мое редактирование, и если это то, что ты собираешься, я могу предоставить более подробную информацию. – pawel

+0

Большое спасибо, это очень полезно, но мне нужно это сделать из двух массивов ... – Makromat

0

Используйте Backbone.Collection.filter() и предоставьте компаратор, соответствующий вашей категории.

http://underscorejs.org/#filter

+0

Спасибо за ответ Да, я вижу это, но я не знаю, как я могу это сделать ... Можете ли вы отправить мне только образец? Я буду очень благодарен !! – Makromat

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