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

时间:2013-03-20 06:42:36

标签: javascript backbone.js backbone-views

我使用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作为发送者传递选项,并在渲染时检查它,但它似乎有点难看。

1 个答案:

答案 0 :(得分:0)

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

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

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

  

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

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