Backbone js:只在特定属性发生变化时才渲染?

时间:2014-11-07 11:33:16

标签: backbone.js javascript-events javascript

我知道在骨干视图中你可以绑定到change事件来重新渲染:

initialize: function() {
  this.model.bind('change', this.render, this);
},

但是有一种方法只能在特定属性发生变化时进行渲染吗?即指定应该或不应该触发重新呈现的属性的白名单(或黑名单)?

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

Backbone还会以change:attributeName的形式触发每个属性更改时的更改事件,因此以下是您想要的内容:

initialize: function() {
  this.model.bind('change:attributeName', this.render, this);
},

来自the docs:

  

“更改:[属性]”(模型,值,选项) - 更新特定属性时。

答案 1 :(得分:1)

您只能指定一个这样的属性

change:attributeNmae

示例:

this.model.bind('change:name', this.render, this);
只有在名称更改时才会调用

渲染

答案 2 :(得分:1)

如果您有属性白名单,则可以执行以下操作

var whitelist = ['att1', 'attr2'];
this.model('change', function(model){
    var hasChanged = function(attr) { //check if attr has changed
            return model.hasChanged(attr);
        };
    if(whitelist.some(hasChanged)) { //some attr has changed
       this.render();
    }
}, this);