我使用Backbone创建了以下结构。每个视图都听同一个模型。每个视图都可以更新它。我怎样才能避免引起的视图的render方法调用 模型更新?
var MyView1 = Backbone.View({
initialize: function() {
this.listenTo(this.model, 'change', this.render)
},
events: {
'click' : 'set'
},
render: function() {
return this
},
set: function (){
this.model.set('property1', 'value')
}
})
var MyView2 = Backbone.View({
initialize: function() {
this.listenTo(this.model, 'change', this.render)
},
events: {
'click' : 'set'
},
render: function() {
return this
},
set: function (){
this.model.set('property1', 'value')
}
})
var model = new Backbone.Model
var view1 = new MyView1({model: model})
var view2 = new MyView2({model: model})
我期待:
点击view1 - > model.set() - >只应调用view2的render方法
从我的WinForms体验现在,我将视图的cid作为发送者传递选项,并在渲染时检查它,但它似乎有点难看。
答案 0 :(得分:0)
您可以使用选项mode.set
调用{silent: true}
,以避免执行视图渲染方法。 E.g:
this.model.set({'property1', 'value'}, {silent: true});
但请注意,一般不建议这样做:
一般来说,在调用发出事件的函数时 (model.set,collection.add等等),如果你想阻止的话 触发事件后,你可以通过{silent:true}作为 选项。请注意,这很少,甚至从来都不是一个好主意。 在事件回调的选项中传递特定标志 看,并选择忽略,通常会更好。