防止单个属性触发this.bind(“更改”)

时间:2011-09-01 16:54:04

标签: javascript-events backbone.js

在Backbone.js中,我有一个模型,我正在绑定一个更改事件,但我想防止这种情况发生在特定的属性更改上。例如,我希望在调用model.set()时每次调用model.set({arbitraryName: value})之前触发它。

这就是我所拥有的:

this.bind("change", function() {
  this.update();
});

但我不知道如何确定正在设置的内容 - 任何想法?

修改

看起来我可以打电话

model.set({arbitraryName: value}, {silent: true}) 

防止更改事件被触发(这对我需要的东西起作用),但如果我有类似的东西会怎么样:

this.bind("change:arbitraryName", functionName)

1 个答案:

答案 0 :(得分:3)

您可以考虑在事件处理程序中使用hasChanged吗?

var self = this;
this.bind("change", function() {
    if(!self.hasChanged("someAttribute")){
        self.update();
    }
});

我不确定我完全理解你的问题。请注意上述和下面的区别。

this.bind("change:someAttribute", function(){
    self.update();
});

第一个会在update保持不变的任何更改时触发someAttribute。第二个将触发对someAttribute的任何更改的更新。

希望这有帮助。