2012-07-09 64 views
0

我有一个父模型与子模型的集合。Backbone JS - 更新嵌套子模型更改上的父模型集合

在父模型视图:

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

更改事件对于每一个孩子的模式,我想呈现的数据形式,然后当变化发生在任何的形式更新父模型被触发,但我不知道在父模型集合中引用正确的子模型的正确方法。

+0

对不起 - 我一直在upvoting,但也许不应该滴答作为我应该:) – user888734 2012-07-09 17:14:07

回答

0

这是来到我的心事:

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

假设你真的想设置视图中的绑定,你可以重写你的渲染方法

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

注意,这种绑定在您的父母模型或集合中进行控制时可能会更有效。

+0

大加一个代理 - 不知道!谢谢! – user888734 2012-07-09 17:25:22