0

我使用 Backbone 创建了以下结构。每个视图都监听相同的模型。每个视图都可以更新它。如何避免导致模型更新的视图的渲染方法调用?

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 的渲染方法应该被调用

根据我的 WinForms 经验,我现在将视图的 cid 作为发送者传递选项并在渲染时检查它,但它看起来有点难看。

4

1 回答 1

0

您可以mode.set使用选项调用{silent: true}以避免执行视图渲染方法。例如:

this.model.set({'property1', 'value'}, {silent: true});

但还要注意,一般不建议这样做:

一般来说,当调用一个发出事件的函数时(model.set、collection.add 等等...),如果你想阻止事件被触发,你可以传递 {silent: true} 为一个选项。请注意,这很少,甚至可能永远不是一个好主意。通过选项中的特定标志让您的事件回调查看并选择忽略,通常会更好。

http://backbonejs.org/#Events-catalog

于 2015-09-17T14:56:11.683 回答