2014-05-06 3 views
0

Vous essayez de configurer une liaison réussie sur un modèle.Reliure du modèle de backbone

La liaison fonctionne lors de l'ajout/la suppression/la mise à jour de valeurs dans le modèle. Mais une fois que je recréer le modèle, la liaison cesse de fonctionner. J'ai besoin de créer un nouveau modèle afin qu'il reçoive un nouvel ID/CID lorsqu'il est enregistré dans Collection.

J'ai essayé this.model.clear() mais cela n'attribue pas de nouvel ID/CID au modèle.

Espérons que cela a du sens. Je vous remercie!

app.View = Backbone.View.extend({  

    initialize: function() { 
     this.model = new app.Model(); 
     this.listenTo(this.model,'change', this.semaphore); 
    }, 

    start: function(value) { 
     // Create new model unless running app first time 
     if(this.model.attributes.title != null) this.model = new app.Model(); 
     this.model.set({title: value}); 
    }, 

    semaphore: function() { 
     // Doesn't get call when new model gets reassigned 
     // Do stuff... 
    } 
} 
+1

Pourquoi ne pas déplacer tous vos appels de liaison à une méthode distincte? Appelez ensuite cette méthode depuis 'initialize' et appelez-la à nouveau lorsque vous affectez un nouveau modèle. Cette "autre méthode" aurait probablement aussi gérer les auditeurs de l'ancien modèle pour éviter les fuites de mémoire et autres. –

+0

C'est une idée. Peux-tu me donner un exemple? Cause le détachement doit se produire avant la réaffectation et la reliure juste après .. Merci! – Oriol

Répondre

0

Rien d'extraordinaire mais cela fonctionne:

initialize: function() { 
    // Leave it blank 
}, 

// New element gets created within the view 
start: function(value) { 
    // Creates new model 
    this.model = new app.Word(); 
    // Binds it to a function 
    this.listenTo(this.model,'change', this.semaphore); 
    // Set value(s) so binding function reacts to it  
    this.model.set({title: value}); 
},