Supposons qu'il y ait 2 collections, représentant respectivement /api/page/1
et /api/page/2
; Y a-t-il un moyen (via Underscore, par exemple) de fusionner ces 2 collections dans une nouvelle collection unique?
Option 1
Si vous n'avez pas encore récupéré la collection, vous pouvez récupérer le premier, puis récupérer le second avec l'indicateur {add: true} et le second sera fusionné dans le premier:
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 : "..."}];
Option 2
Si vous avez déjà récupéré les collections et les avez stockées dans deux variables, vous pouvez simplement ajouter tout le contenu de la deuxième collection à la première:
collection1.add(collection2.toJSON());
Cette option souffre du fait que la première collection déclenche l'événement "add" lorsque la deuxième collection lui est ajoutée. Si cela a des effets secondaires tels qu'une interface utilisateur indésirable qui est restituée à cause de cet événement, vous pouvez le supprimer en ajoutant l'indicateur {silent: true}.
collection1.add(collection2.toJSON(), {silent : true});
Option 3
Si vous avez simplement besoin du format JSON de ces collections, c'est-à-dire pour le rendu des modèles HTML, vous pouvez simplement tout réduire en littéraux JS (tableaux, objets):
collection1.toJSON().concat(collection2.toJSON());
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, ...];
Option 4 = Option 2 + 3
Si vous avez déjà récupéré les deux collections, vous pouvez réduire le nombre de littéraux JS et tout ajouter à une nouvelle collection Backbone.
var rawCollection = collection1.toJSON().concat(collection2.toJSON());
var newCollection = new Backbone.Collection(rawCollection);
essayez ceci, la collection est un tableau de modèles
collection1.add(collection2.models);
si on utilise
collection1.add(collection2.toJSON());
puis référence chage
utilisation
collection.models
au lieu de
collection.toJSON()
collection.add(models, [options])
Collection est un tableau de modèles
collection.models
retourne un tableau de modèles
Ajoutez un modèle (ou un tableau de modèles) à la collection.
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..
Il me semble qu'en faisant cela, vous perdez la sémantique liée à /api/page/{1, 2}/
.
Il me semble également que ni le réseau principal, ni le trait de soulignement, ne vous fournit une fonction/méthode faisant exactement ce que vous essayez de faire.
Donc vos options:
Mais vous le saviez probablement déjà.
Collection.models fournit un accès direct au tableau de modèles et Collection.add prendra un tableau de modèles en argument.