2012-02-23 12 views
1

継承された変数を、Backbone.js内の親に対処する正しい方法は何ですか? 私はこれを行うためのいくつかの論理的な方法を見ることができますが、効率が悪く見え、別の意見を求める価値があると考えました。Backbone.js子変数を親に永続化する

2つのクラスは両方とも、コレクションに保存する新しいモデルを構築するビューです。親は、この変数を設定できるポップアップウィンドウに変数を渡します。

答えて

5

は私が答えるために、あなたの質問に十分なディテールがあるとわからないんだけど、これを行うにはいくつかの方法があります:

  • 共通モデルが。これを説明すると、2つのビューを使用してモデルを構築しているので、モデル自体を子ビューに渡し、ビュー間で変数を渡すのではなく、子ビューでモデルを変更するのが最も簡単な方法です。

    var MyModel = Backbone.Model.extend({}); 
    
    var ParentView = Backbone.View.extend({ 
        // initialize the new model 
        initialize: function() { 
         this.model = new MyModel(); 
        }, 
    
        // open the pop-up on click 
        events: { 
         'click #open_popup': 'openPopUp' 
        }, 
    
        openPopUp: function() { 
         // pass the model 
         new PopUpView({ model: this.model }) 
        } 
    }); 
    
    var PopUpView = Backbone.View.extend({ 
        events: { 
         'change input#someProperty': 'changeProperty' 
        }, 
    
        changeProperty: function() { 
         var value = $('input#someProperty').val(); 
         this.model.set({ someProperty : value }); 
        } 
    }); 
    
  • 親のイベントをトリガーします。あなただけのあなただけの親への参照を渡すと、イベントをトリガすることができ、モデルを経由して値を渡すことはできません何らかの理由場合:

    var ParentView = Backbone.View.extend({ 
        initialize: function() { 
         // bind callback to event 
         this.on('updateProperty', this.updateProperty, this); 
        }, 
    
        updateProperty: function(value) { 
         // do whatever you need to do with the value here 
        }, 
    
        // open the pop-up on click 
        events: { 
         'click #open_popup': 'openPopUp' 
        }, 
    
        openPopUp: function() { 
         // pass the model 
         new PopUpView({ parent: this }) 
        } 
    }); 
    
    var PopUpView = Backbone.View.extend({ 
        events: { 
         'change input#someProperty': 'changeProperty' 
        }, 
    
        changeProperty: function() { 
         var value = $('input#someProperty').val(); 
         this.options.parent.trigger('updateProperty', value); 
        } 
    }); 
    
+0

パーフェクト、トリガイベントは、私がいたまさにでした探している。 – Moustachio

+0

これは助けてくれてうれしいです。最初のオプション(モデルを渡す)は、イベント(モデル上の "change:someProperty"イベント)をトリガーすることにも注意してください。私の意見ではもっと簡単です。 – nrabinowitz

関連する問題