我想在我更改模型的任何属性时触发更改事件,除了一个。这可能吗?除了做:
model.bind('change:prop1', func);
model.bind('change:prop2', func);
model.bind('change:prop3', func);
etc....
或者,有没有办法找出哪个属性从事件处理程序中触发了更改?
由于
答案 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');
}
});