Наблюдаемое вычисляемое свойство не срабатывает, если оно изменяется дважды подряд.
-
12-11-2019 - |
Вопрос
У меня есть Ember.Object, который я обновляю с помощью свойства, как показано ниже, но если я изменю PrimaryDemo дважды подряд, он не сработает, но если я изменю PrimaryDemo, а затем Скорость, он изменится.Я озадачен, почему это так и как я могу это исправить.
dependantChanged: function() {
console.log('Firing change');
this.get('_update')(this);
}.observes('primaryDemo', 'Rate', 'Totals'),
ОБНОВЛЯТЬ:Итак, первый ответ и скрипка заставили меня задуматься о том, в чем проблема, и она связана с изменением свойства объекта, а не самого объекта.Я думаю, что Ember выполняет хэш-проверку, чтобы увидеть, есть ли разница.В моем случае я уже использую underscorejs, поэтому просто меняю свойство, а затем использую _.clone(demo) перед установкой.Я бы предпочел не делать этого, поэтому подожду, чтобы увидеть, есть ли более элегантное решение, прежде чем закрывать это.
Решение
Вам не нужно снова устанавливать primaryDemo
.В Пример это ничего не делает.Вам нужно заставить рассказать Ember уведомлять вашего наблюдателя. Смотрите эту скрипку ...
var demo = { Imps: 1, Demo: { Id: 2 } }
var obj = Ember.Object.create({
dependantChanged: function() {
console.log('Firing change');
}.observes('primaryDemo', 'Rate', 'Totals'),
});
obj.set('primaryDemo', demo);
demo.Imps = 2;
obj.set('primaryDemo', demo);
// Notify observers on obj#primaryDemo
Ember.notifyObservers(obj, 'primaryDemo');
.
Другие советы
А можно поподробнее?Я создал простой JSFiddle http://jsfiddle.net/JjbXb/ из вашего описания, но изменение одного и того же свойства подряд, как вы говорите, работает.
Вы уверены, что ценность primaryDemo
отличается в двух последовательных звонках?