37 votes

Comment cloner une collection de dorsale

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.

60voto

jdvauguet Points 829

Manière la plus simple:

 var cloned = new Backbone.Collection(original.toJSON());
 

original est la collection à cloner.

Pourrait toujours étendre ensuite Collection de Backbone pour ajouter la prise en charge du clone sans prise en charge de l'héritage.

14voto

Paul Points 6185

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()));
});

8voto

Craig Myles Points 335

Utilisez la méthode Backbone Collection clone () :

 var clonedCollection = myCollection.clone();
 

4voto

Dan Malcolm Points 840

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X