我希望在更改模型的任何属性(除了一个属性之外)时都会触发更改事件。这可能吗?除了做:
model.bind('change:prop1', func);
model.bind('change:prop2', func);
model.bind('change:prop3', func);
etc....
或者,是否有一种方法可以从事件处理程序中找出哪个属性触发了更改?
您可以使用model.bind('change',function() {/*...*/})
,并且在功能中使用hasChanged
检查属性:hasChanged
Justin的答案将在'propIWantToExclude'和其他一些属性一起更改时返回。您可能不想这样做,因此您还应该查看if(model.hasChanged('propIWantToExclude')) return;
的大小:
model.changedAttributes
响应David Tuite的要求回答问题的第一部分,您可以设置一个函数来响应“ changed”事件,如果您要忽略的属性未更改,则触发一个自定义事件。
如果未更改属性,此逻辑将触发自定义事件:if(model.changedAttributes.length == 1 && model.hasChanged('attrIWantToExclude')) {
return;
}
。如果更改了多个属性,包括您要忽略的属性,那么自定义事件也不会触发:
'somePropertyOtherThanThePropIWantToExcludeChanged'