Javascript 主干:如果模型从同一视图更改,则避免视图渲染

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

我用主干创建了以下结构。每个视图都听相同的模型。每个视图都可以更新它。如何避免视图的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作为发送方传递,并使用选项在渲染时检查它,但它看起来有点难看。

您可以调用
模式。使用选项
{silent:true}
设置
,以避免执行视图渲染方法。例如:

this.model.set({'property1', 'value'}, {silent: true});
但也请注意,一般不建议这样做:

一般来说,在调用发出事件的函数时 (model.set、collection.add等…),如果要防止 从触发事件开始,您可以将{silent:true}作为 选项请注意,这很少,甚至从来都不是一个好主意。 传递事件回调选项中的特定标志 看,并选择忽略,通常效果会更好


除了在“选项”中发送视图信息外,别无其他方法。您可以在选项本身中发送视图,并在渲染中检查它。-为了保持渲染方法干净,可以做的一个小更改是将“change”事件绑定到一个中间方法,在该方法中检查是否调用render。当两个视图都响应更改进行渲染时,是否会导致视觉或用户体验问题?如果不是,那么最干净的代码就是让它发生:)