Подтвердить что ты не робот

Магистраль - объединить 2 коллекций?

Предположим, что есть 2 коллекции, представляющие соответственно /api/page/1 и /api/page/2; есть ли (через Underscore, например), чтобы объединить эти 2 Коллекции в новую единую коллекцию?

4b9b3361

Ответ 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 будет принимать массив моделей в качестве аргумента.