2015-10-20 184 views
0

視圖1集模型 - 骨幹

this.orderDataModel.set({ 
    channel_id: channel_id, 
    channel_type: channel_type 
}, { silent: true }); 

說,我把我在一個視圖模型可以訪問它的另一種觀點?

視圖2

this.orderDataModel = new orderDataModel(); 
console.log(this.orderDataModel); 
console.log(self.orderDataModel.get("channel_id")); //undefined 

我沒有得到任何屬性?

編輯:

我通過路由器調用第二種觀點

manifestDetails: function (id) { 
    "use strict"; 
    var optionsManifest = { manifestId: id }; 
    if (this.manifestDetail) { 
     this.manifestDetail.initialize(optionsManifest) 
    } else { 
     this.manifestDetail = new manifestDetailsView(optionsManifest); 
    } 

    this.manifestDetail.render(); 
} 
+0

Yare手動調用它的'initialize'方法,這對我來說似乎是錯誤的。它應該在實際創建視圖時自動調用。你也從'view1'和'view2'分享了很少的代碼,但是沒有代碼來初始化這些視圖..請分享更多的代碼... –

回答

3

只要這兩種觀點都附有相同的模型,他們都應該能夠訪問模型屬性。 可能發生的事情是,它們要麼不使用相同的模型,要麼嘗試在實際發生之前打印更改。

正如你可以看到在這個例子:

http://jsfiddle.net/m9vfrhmL/1/

(點擊紅名去改變它)。

正如你所看到的,當你點擊文本時,只有第二個視圖正在改變。這是因爲只有第二個視圖實際上是在聽模型中的變化,而第一個視圖是麻木的(即使它們參照相同的模型!)。 因此,加入listenTo每個意見都會很容易解決的問題:

var View1 = Backbone.View.extend({ 
    el: '#myName1', 
    initialize: function(){ 
     this.listenTo(this.model,"change",this.render); 
    }, 
    render: function(){ 
     this.$el.text(this.model.get("name")) 
    } 
}); 

var View2 = Backbone.View.extend({ 
    el: '#myName2', 
    events:{ 
     'click' : 'changeName' 
    }, 
    changeName: function(){ 
     this.model.set({name:"vini"}); 
    }, 
    initialize: function(){ 
     this.listenTo(this.model,"change",this.render); 
    }, 
    render: function(){ 
     this.$el.text(this.model.get("name")) 
    } 
}); 

var model = new Backbone.Model(); 

var view1 = new View1({model:model}); 

var view2 = new View2({model:model}); 

model.set({name:"mor"}) 

http://jsfiddle.net/5h9Les7q/5/

不管怎樣,使用silent:true會導致更改事件不被解僱,我認爲它時並不需要在這種情況下。

+0

我正在渲染使用路由器的新視圖,我認爲這就是爲什麼不能夠查看模型 – vini