Existe-t-il un moyen de cloner facilement Backbone Collection? Je me demande pourquoi il n'y a pas de méthode intégrée comme pour les modèles. Mon problème est que j'ai un modèle tenant une collection d'enfants. Quand je clone le modèle. J'ai toujours la collection d'enfants mais seulement avec leurs valeurs par défaut.
Réponses
Trop de publicités?Quelle est votre cas d'utilisation que vous voulez cloner la collection?
Il n'y a pas construit dans le clone de la fonction pour une collection parce que vous ne voulez pas de cloner les modèles de la collection. Le clonage d'un modèle à cause qu'il y a deux instances distinctes du même modèle, et si vous mettez à jour un modèle, l'autre ne sera pas mis à jour.
Si vous souhaitez créer une nouvelle collection basée sur certains critères, vous pouvez utiliser le filtre de la collection de la méthode.
var freshmenModels = studentsCollection.filter(function(student) {
return student.get('Year') === 'Freshman';
}
var freshmenCollection = new Backbone.Collection(freshmenModels);
Pour aller de l'avant et clone les modèles de la collection, vous pouvez écrire le code suivant
var clonedCollection = new Backbone.Collection();
studentsCollection.each(function(studentModel) {
clonedCollection.add(new Backbone.Model(studentModel.toJSON()));
});
Utilisez la méthode Backbone Collection clone () :
var clonedCollection = myCollection.clone();
Une autre option, si vous avez besoin des éléments suivants (qui est ce que je cherchais quand j'ai trouvé cette question ;) ):
- L'exemplaire de la collection doivent être du même type que l'original de la collection (par exemple, vous avez créé votre propre type de collection qui s'étend de la colonne vertébrale.De la Collection)
- L'exemplaire de la collection doit être créé avec les mêmes options que l'original
- Les modèles de la copie de la collection doit être créé à l'aide du modèle.méthode clone()
Code:
var models = original.map(function (model) { return model.clone(); });
var options = _.clone(original.options);
var copy = new original.constructor(models, options);
Générique de la méthode clone sur la colonne vertébrale.Collection serait gênant car il y a toujours des subtilités de savoir si les modèles et leurs objets imbriqués d'avoir copié par référence ou sont eux-mêmes cloné. Les exigences varient énormément en fonction de votre scénario, il a été laissé pour vous d'écrire ce que vous avez besoin.