Javascript 主干:如果模型从同一视图更改,则避免视图渲染
我用主干创建了以下结构。每个视图都听相同的模型。每个视图都可以更新它。如何避免视图的render方法调用导致 模型更新Javascript 主干:如果模型从同一视图更改,则避免视图渲染,javascript,backbone.js,backbone-views,Javascript,Backbone.js,Backbone Views,我用主干创建了以下结构。每个视图都听相同的模型。每个视图都可以更新它。如何避免视图的render方法调用导致 模型更新 var MyView1 = Backbone.View({ initialize: function() { this.listenTo(this.model, 'change', this.render) }, events: { 'click' : 'set' }, render: function() { return this
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作为发送方传递,并使用选项在渲染时检查它,但它看起来有点难看。您可以调用
模式。使用选项{silent:true}
设置,以避免执行视图渲染方法。例如:
this.model.set({'property1', 'value'}, {silent: true});
但也请注意,一般不建议这样做:
一般来说,在调用发出事件的函数时
(model.set、collection.add等…),如果要防止
从触发事件开始,您可以将{silent:true}作为
选项请注意,这很少,甚至从来都不是一个好主意。
传递事件回调选项中的特定标志
看,并选择忽略,通常效果会更好
除了在“选项”中发送视图信息外,别无其他方法。您可以在选项本身中发送视图,并在渲染中检查它。-为了保持渲染方法干净,可以做的一个小更改是将“change”事件绑定到一个中间方法,在该方法中检查是否调用render。当两个视图都响应更改进行渲染时,是否会导致视觉或用户体验问题?如果不是,那么最干净的代码就是让它发生:)