0

子モデルのコレクションを持つ親モデルがあります。子モデルごとに、データを含むフォームをレンダリングし、いずれかのフォームで変更が発生したときに親モデルを更新したいと考えています。

親モデル ビュー:

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

変更イベントがトリガーされていますが、親モデル コレクションで正しい子モデルを参照する正しい方法がわかりません。

4

2 に答える 2

1

ビューにバインドを本当に設定したい場合、render メソッドを次のように書き換えることができます。

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

このようなバインディングは、親モデルまたはコレクションで制御されている場合、おそらくより効果的であることに注意してください。

于 2012-07-09T17:18:04.653 に答える
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
        }
     }
于 2012-07-09T17:07:10.300 に答える