1

私は2つのビューを持ち、それらの間に値を渡す必要があります。バックボーンのビュー間で値を渡す

var appModel1 = Backbone.Model.extend({ 
     url: '/', 
     defaults: { 
      name: 'Default name' 
     }, 
     validate: function(attr){ 

     } 
    }); 

    var appCollection1 = Backbone.Collection.extend({ 
     model: appModel1 
    }); 

    var collection1 = new appCollection1(); 

    var model1 = new appModel1(); 
    model1.bind('change', function(){ 
     model1.save(); 
    }); 


    var appView1 = Backbone.View.extend({ 
     model: model1, 
     _modelDataBind: undefined, 
     el:'#container1', 
     initialize: function(){ 
      this._modelDataBind = new Backbone.ModelBinder(); 
      this.render(); 
     }, 
     render: function(){ 
      var template = _.template($('#app1').html()); 
      this.$el.html(template); 
      var bindings = { 
        name: '#txtName' 
      }; 
      var changeTrigger = { 
        'changeTriggers': { 
         '': 'keyup', 
         '#txtName': 'keyup' 
        } 
      }; 
      this._modelDataBind.bind(this.model, this.$el, bindings, changeTrigger); 
     }, 
     'events': { 
      'click #btnSubmit': 'addRecord' 
     }, 
     addRecord: function(){ 
      collection1.push(model1); 
      var item = '<li>Name: ' + model1.get('name') + '</li>'; 
      var app2 = new appView2({collection: collection1}); 
      $('#txtName').val('').focus(); 
     } 
    }); 
    var view1 = new appView1({}); 


    var appView2 = Backbone.View.extend({ 
     el: '#container2', 
     initialize: function(){ 
      this.render(); 
     }, 
     render: function(){ 
      var template = _.template($('#app2').html()); 
      this.$el.html(template); 
      this.collection.each(function(model){ 
       var item = '<li>Name: ' + model.get('name') + '</li>'; 
       $('#infoList').append(item); 
      }); 
     } 
    }); 
    var view2 = new appView2({}); 

今のところ、コレクション変数とID変数を使用して値を渡すことしかできませんでした。

予約された変数はありますか?

他の変数を使用してデータを渡すことはできますか?

var app2 = new appView2({nameObj: nameObj}); 

これは失敗します。

+0

が、これはサイドバーの最初の**関連**質問と同じ質問はありませんか? –

答えて

2

ドキュメントごとに、バックボーンビューはオプションオブジェクトのmodel, collection, el, id, className, tagName, attributes and eventsプロパティでのみ動作します。

しかし、他のデータを渡すことができます。optionsオブジェクト全体が、initializeコールバックの最初のパラメータとして利用可能になります。例えば

var AppView = Backbone.View.extend({ 
    el: '#container2', 
    initialize: function(options){ 
    // access your data here 
    this.valuableInformation = options.valuableInformation; 
    if(!options.doNotRender) 
     this.render(); 
    }, 
    render: function(){ 
    } 
}); 

new AppView({ 
    valuableInformation:"it's nothing", 
    doNotRender: true 
}); 
+0

ビューに送られるパラメータは基本的にjsonです。変数名は文字列で、モデルやコレクションなどの事前定義されたキーワードではないので、引用符で囲む必要があります。したがって、あなたの例は '新しいAppView({" worthInformation ":"それは何もない "、" doNotRender ":true})'のようになります。 –

+0

@SandeepSukhija javascriptオブジェクトです。プロパティ名が有効なjavascript変数名でない限り、何も引用する必要はありません。 –

関連する問題