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

f45qwnt8  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(143)

我希望每当我更改模型的任何属性时都激发一个更改事件,但有一个属性除外。这可能吗?除了执行以下操作之外:

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

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

iyzzxitl

iyzzxitl1#

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

rsl1atfo

rsl1atfo2#

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

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

icnyk63a3#

响应大卫Tuite回答问题第一部分的请求,您可以设置一个函数来响应“changed”事件,然后在您要忽略的属性未更改时触发一个自定义事件。
此逻辑将触发自定义事件:'somePropertyOtherThanThePropIWantToExcludeChanged'(如果未更改属性)。如果更改了多个属性(包括要忽略的属性),则也不会触发自定义事件:

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

相关问题