Наблюдаемое вычисляемое свойство не срабатывает, если оно изменяется дважды подряд.

StackOverflow https://stackoverflow.com/questions/9445676

  •  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 отличается в двух последовательных звонках?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top