2014-06-17 2 views
1

Я создаю интернет-магазин, где клиенты могут выбирать различные элементы и настраивать их в разных цветах. При оформлении заказа я хотел бы сгруппировать их в первую очередь по описанию товара, а затем разделить возвращенные группы на другие группы цветов.Использование groupBy рекурсивно в коллекции backbone.js

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

var groupedItems = this.collection.groupBy(function(model){ return model.get('description');}); 

Как я мог запустить его снова, чтобы принять этот вывод и группу по цвету? Думаю, мне, возможно, придется снова включить вывод в коллекцию?

Любая помощь очень ценится

+0

Функциональность группы BaseBy является просто прокси-сервером [groupby] (http://underscorejs.org/#groupBy), поэтому вы используете это. Что-то вроде 'var groupedColours = _.groupBy (groupedItems, function (item) {return item.get ('color');}, this);' – Jack

+0

Спасибо за ответ @Jack. Ты поставил меня на правильный путь, и теперь у меня есть что-то, что работает! Это код, к которому я пришел. 'var finalGroupedArray = []; var groupedItems = this.collection.groupBy (функция (модель) {return model.get ('description');}); var count = 0; для (описание var в groupedItems) { var groupedColours = _.groupBy (groupedItems [Object.keys (groupedItems) [count]], function (item) {return item.get ('color');}, this); finalGroupedArray.push (groupedColours); count ++; } ' – moleboy

+0

Рад помочь, хотя, я думаю, вы забыли отправить код, на который вы пришли. – Jack

ответ

1

В ответ на мой первоначальный вопрос с решением, которое Джек поставил меня на путь, это код, который я использовал для группы коллекцию одним атрибутом следуют подгруппы другого атрибута , Это использует группу подчеркиванияBy для результата базовой группыBy.

var finalGroupedArray = []; 
var groupedItems = this.collection.groupBy(function(model){ return model.get('description');}); 
var count = 0; 

for(var description in groupedItems){ 
    var groupedColours = _.groupBy(groupedItems[Object.keys(groupedItems)[count]], function (item) {return item.get('colour');},this); 
    finalGroupedArray.push(groupedColours); 
    count++; 
} 
Смежные вопросы