Backbone-是否可以将更改事件绑定到模型,除了一个属性之外?

问题描述 投票:7回答:3

我希望在更改模型的任何属性(除了一个属性之外)时都会触发更改事件。这可能吗?除了做:

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

或者,是否有一种方法可以从事件处理程序中找出哪个属性触发了更改?

javascript backbone.js javascript-framework
3个回答
11
投票

您可以使用model.bind('change',function() {/*...*/}),并且在功能中使用hasChanged检查属性:hasChanged


3
投票

Justin的答案将在'propIWantToExclude'和其他一些属性一起更改时返回。您可能不想这样做,因此您还应该查看if(model.hasChanged('propIWantToExclude')) return;的大小:

model.changedAttributes

1
投票

响应David Tuite的要求回答问题的第一部分,您可以设置一个函数来响应“ changed”事件,如果您要忽略的属性未更改,则触发一个自定义事件。

如果未更改属性,此逻辑将触发自定义事件:if(model.changedAttributes.length == 1 && model.hasChanged('attrIWantToExclude')) { return; } 。如果更改了多个属性,包括您要忽略的属性,那么自定义事件也不会触发:

'somePropertyOtherThanThePropIWantToExcludeChanged'
© www.soinside.com 2019 - 2024. All rights reserved.