Предположим, что есть 2 коллекции, представляющие соответственно /api/page/1
и /api/page/2
; есть ли (через Underscore, например), чтобы объединить эти 2 Коллекции в новую единую коллекцию?
Магистраль - объединить 2 коллекций?
Ответ 1
Вариант 1
Если вы еще не выбрали коллекцию, вы можете выбрать первую, затем выбрать вторую с флагом {add: true}, а второй - в первый.
collection.fetch({data : {page : 2});
=> [{id: 1, article : "..."}, {id: 2, article : "..."}];
collection.fetch({data : {page : 2}, add : true });
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, {id: 3, article : "..."}];
Вариант 2
Если вы уже собрали коллекции и сохранили их в двух переменных, вы можете просто добавить все содержимое второй коллекции в первую:
collection1.add(collection2.toJSON());
Эти параметры страдают от того, что первая коллекция будет запускать событие "добавить", когда вторая коллекция будет добавлена к ней. Если у этого есть побочные эффекты, такие как нежелательный пользовательский интерфейс, который повторно создается из-за этого события, вы можете его подавить, добавив флаг {silent: true}
collection1.add(collection2.toJSON(), {silent : true});
Вариант 3
Если вам нужен только формат JSON этих коллекций, то есть для целей создания HTML-шаблонов, вы можете просто свести все к литералам JS (массивы, объекты):
collection1.toJSON().concat(collection2.toJSON());
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, ...];
Вариант 4 = Вариант 2 + 3
Если вы уже выбрали обе коллекции, вы можете свести к JS-литералам и добавить все в новую коллекцию Backbone.
var rawCollection = collection1.toJSON().concat(collection2.toJSON());
var newCollection = new Backbone.Collection(rawCollection);
Ответ 2
попробуйте это, коллекция - это массив моделей.
collection1.add(collection2.models);
если мы используем
collection1.add(collection2.toJSON());
тогда ссылка chage
Ответ 3
collection.add(models, [options])
Коллекция представляет собой массив моделей
collection.models
возвращает массив моделей
Добавьте модель (или массив моделей) в коллекцию.
A = Backbone.Collection;
collection1 = new A([
{key, 'value'}, //model1
{key : value1} //model2 in collection1
]);
B = Backbone.Collection;
collection2 = new B([
{key1, 'value'}, //model1
{key1 : value1} //model2 in collection2
]);
collection1.add(collection2.models); //now, collection1 has four models..
Ответ 4
использование
collection.models
insted
collection.toJSON()
Ответ 5
Мне кажется, что при этом вы теряете семантику, привязанную к /api/page/{1, 2}/
.
Мне также кажется, что ни основа, ни подчеркивание, предоставляют вам функцию/метод, выполняющий именно то, что вы пытаетесь сделать.
Итак, ваши варианты:
- создайте новую коллекцию, добавьте каждый элемент из ваших предыдущих коллекций;
- добавить первые элементы коллекции ко второй.
Но вы, наверное, уже это знали.
Ответ 6
Collection.models обеспечивает прямой доступ к массиву moels, а Collection.add будет принимать массив моделей в качестве аргумента.