Магистраль - возможно ли привязать событие изменения к модели, кроме одного свойства? - PullRequest
7 голосов
/ 14 ноября 2011

Я хотел бы, чтобы событие изменения срабатывало каждый раз, когда я изменял любое свойство модели, кроме одного. Это возможно? Помимо выполнения:

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

Или, альтернативно, есть ли способ узнать, какое свойство вызвало изменение из обработчика событий?

Спасибо

Ответы [ 3 ]

11 голосов
/ 14 ноября 2011

Вы можете использовать model.bind('change',function() {/*...*/}), а в функции использовать hasChanged для проверки атрибутов: if(model.hasChanged('propIWantToExclude')) return;

3 голосов
/ 18 июня 2013

Ответ Джастина выше вернется, когда 'propIWantToExclude' и некоторые другие атрибуты будут изменены вместе.Вы, вероятно, не хотите этого делать, поэтому вам также следует взглянуть на размер model.changedAttributes:

if(model.changedAttributes.length == 1 && model.hasChanged('attrIWantToExclude')) {
    return;
}
1 голос
/ 20 августа 2012

Отвечая на запрос Дэвида Туита, чтобы ответить на первую часть вопроса, вы можете настроить функцию для ответа на «измененное» событие, а затем вызвать пользовательское событие, если свойство, которое вы хотите игнорировать, не изменилось.

Эта логика вызовет пользовательское событие: 'somePropertyOtherThanThePropIWantToExcludeChanged', если свойство не было изменено. Если было изменено несколько свойств, в том числе того, которое вы хотите игнорировать, пользовательское событие также НЕ будет запускаться:

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