2012-07-09 4 views
0

J'ai un modèle parent avec une collection de modèles enfants. Pour chaque modèle d'enfant, je veux rendre un formulaire avec les données, puis mettre à jour le modèle de parent lorsqu'un changement se produit sur l'une des formes:Backbone JS - mise à jour de la collection du modèle parent sur le modèle enfant imbriqué

Dans la vue du modèle parent:

render: function() {  
    _.each(this.model.get('myChildModelCollection').models, function (myChildModel) { 
     var childForm = new ChildFormView({model: myChildModel}) 
     childForm.model.on('change', function() { 
       //DO SOMETHING HERE TO UPDATE THE PARENT MODEL COLLECTION 
     }) 
     this.$("#child-list").append(childForm.render().el); 
    }); 
} 

L'événement de changement est déclenché, mais je ne connais pas la bonne façon de référencer le bon modèle enfant dans la collection de modèles parents.

+0

Désolé - j'ai été upvoting, mais peut-être pas cocher autant que je devrais :) – user888734

Répondre

0

C'est quelque chose qui est venu à mon esprit:

render: function() { 
     var that = this; 
     _.each(this.model.get('myChildModelCollection').models, function (myChildModel) { 
      var childForm = new ChildFormView({model: myChildModel}) 
      childForm.model.on('change', function() { 
       that.renderTheCollection(); 
      }) 
      this.$("#child-list").append(childForm.render().el); 
     }); 
    }, 
    renderTheCollection : function() { 
     _.each(this.model.get('myChildModelCollection').models, function (myChildModel) { 
       // Update 
     } 
    } 
1

En supposant que vous voulez vraiment définir les liaisons de votre point de vue, vous pouvez réécrire votre render comme

render: function() { 
    var parent=this.model, coll=parent.get('myChildModelCollection'); 

    // Backbone proxies Underscore methods on its collections 
    coll.each(function (myChildModel) { 
     var childForm = new ChildFormView({model: myChildModel}) 
     this.$("#child-list").append(childForm.render().el); 
    }); 

    coll.on('change', function(model) { 
     // do what you have to do with 
     // parent as your parent model, 
     // coll as your collection, 
     // model set to the modified child 
    }); 
} 

Notez que ces fixations sera probablement plus efficace lorsqu'il est contrôlé soit dans votre modèle parent ou dans la collection.

+0

Big plus un pour le proxy - ne savait pas cela! Merci! – user888734

Questions connexes