视图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 :(得分: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
将导致更改事件不会被触发,我认为在这种情况下不需要。