web-dev-qa-db-fra.com

Backbone model.destroy (): la suppression explicite de la collection est-elle nécessaire?

J'ai une question simple. Je regarde une fonction avec 2 lignes de code:

deleteTask: function() {
    this.parent.collection.remove(this.model);
    this.model.destroy();
}

Si je commente la première ligne, qui est censée supprimer le modèle de sa collection, les choses semblent fonctionner comme prévu (comme dans, le modèle est supprimé automatiquement). Sur le site Web de Backbone, voici la description pertinente de la fonction "détruire" d'un modèle:

Déclenche un événement "destroy" sur le modèle, qui se propage à travers toutes les collections qui le contiennent.

Suis-je sûr de supposer que la suppression de this.parent.collection.remove(this.model); n'affectera en rien la fonctionnalité du code? C'est ce que je pense, mais je voulais m'en assurer.

Je vous remercie!

23
AndraD

Si vous détruisez un modèle, il est supprimé de toutes les collections qui le contenaient. Vous pouvez le voir dans la source backbone

//Internal method called every time a model in the set fires an event.
_onModelEvent: function(event, model, collection, options) {
    ...
    if (event === 'destroy') this.remove(model, options);

Donc oui, je ne pense pas que vous auriez besoin de supprimer explicitement le modèle de votre collection.

Mais ne me faites pas confiance, testez par vous-même :)

deleteTask: function() {
    that = this;
    this.model.destroy({
      success: function() {
        console.log(that.parent.collection);
      }
    });
}

Vérifiez vous-même la console pour voir si le modèle a été supprimé de la collection.

35
asgeo1