2013-02-23 2 views
0

У меня есть некоторые проблемы с выяснением способа сортировки коллекции BackboneJS, содержащей связанные элементы. Можно ли сделать это эффективно? (Я думаю, что нужно вернуть счет предыдущих элементов, но это действительно неэффективно)BackboneJS: Сортировка коллекции связанных товаров

Что должен делать компаратор? - и нужен ли двойной список?

Мои элементы выглядят как

[ { ID: 1, имя: 'имя', previousItem: 2 }, { ID: 2, имя: 'othername', previousItem : нулевой } ]

+0

Я не уверен, что я понимаю ваш вопрос. Я думал, что у Backbone Collection уже есть функции сортировки. Возможно, опубликуйте соответствующий фрагмент кода, чтобы мы могли видеть, как выглядит ваша реализация. – Gohn67

+0

У него есть функция сортировки, но для этого требуется прямой атрибут прямой сортировки, например сортировка по имени в алфавитном порядке. –

+0

Зачем вам нужно знать, что такое предыдущий элемент? Если у вас есть коллекция, вы сможете легко найти ее без ссылки. Наверное, у вас есть случай, когда у вас есть только модель? Одна вещь, которую вы могли бы сделать, это отсортировать ее сначала и переписать их просто простой итерацией. Это была бы дополнительная мысль O (n). – Gohn67

ответ

1

Вот базовый код для сборки коллекции. Я предполагаю, что вы используете базовую модель здесь. В цикле вам нужно добавить свои модели в начало коллекции (unshift), так как вы знаете только предыдущий элемент.

Ключ здесь - знать, что такое последний элемент. Если вы этого не знаете, это не сработает.

model = frontItem; 
while (model != null) { 
    collection.unshift(model); 
    model = model.attr('previousItem')  
} 
0

есть обсуждение об этом на github, вы можете также использовать comparator, если вы хотите использовать comparator вам необходимо подчеркнуть,

var PhotoCollection = Backbone.Collection.extend({ 
    model: Photo, 
    comparator: function(item) { 
     return item.get('pid'); 
    } 
}); 
+0

Для этого требуется атрибут прямой прямой, который у меня отсутствует. В моем случае у меня есть только ссылка на предмет, который должен быть помещен перед другим. Данные примера могут быть [{id: 1, name: 'name', previousItem: 2}, {id: 2, name: 'othername', previousItem: null}, {id: 3, name: 'third', previousItem: 1}] Правильная сортировка будет id # 2, id # 1, id # 3 –

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