骨干 - 是否可以将更改事件绑定到模型,但一个属性除外?

时间:2011-11-14 19:09:12

标签: javascript javascript-events backbone.js javascript-framework

我想在我更改模型的任何属性时触发更改事件,除了一个。这可能吗?除了做:

model.bind('change:prop1', func);
model.bind('change:prop2', func);
model.bind('change:prop3', func);
etc....

或者,有没有办法找出哪个属性从事件处理程序中触发了更改?

由于

3 个答案:

答案 0 :(得分:11)

您可以使用model.bind('change',function() {/*...*/})并在函数中使用hasChanged来检查属性:if(model.hasChanged('propIWantToExclude')) return;

答案 1 :(得分:3)

当'propIWantToExclude'和其他一些属性一起更改时,Justin的上述答案将返回。您可能不想这样做,因此您还应该查看model.changedAttributes

的大小
if(model.changedAttributes.length == 1 && model.hasChanged('attrIWantToExclude')) {
    return;
}

答案 2 :(得分:1)

响应David Tuite回答问题第一部分的请求,您可以设置一个函数来响应“已更改”事件,然后在您要忽略的属性未更改时触发自定义事件。 / p>

如果属性未更改,此逻辑将触发自定义事件:'somePropertyOtherThanThePropIWantToExcludeChanged'。如果更改了多个属性(包括您要忽略的属性),则自定义事件也不会触发:

model.bind('change', function(){
    if( !model.hasChanged('propIWantToExclude') ){
        model.trigger('somePropertyOtherThanThePropIWantToExcludeChanged');
    }
});