A propriedade computada observada não é acionada se alterada duas vezes seguidas

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

  •  12-11-2019
  •  | 
  •  

Pergunta

Eu tenho um Ember.Object que estou atualizando com uma propriedade como abaixo, mas se eu alterar o PrimaryDemo duas vezes seguidas, ele não dispara, mas se eu alterar o PrimaryDemo e depois o Rate, ele muda.Estou intrigado sobre o porquê disso e como posso consertar isso.

dependantChanged: function() {
    console.log('Firing change');
    this.get('_update')(this);
}.observes('primaryDemo', 'Rate', 'Totals'),

ATUALIZAR:Portanto, a primeira resposta e o violino me fizeram pensar qual era o problema, e isso se deve à alteração de uma propriedade em um objeto e não ao objeto em si.Acho que o ember faz uma verificação de hash para ver se há alguma diferença.No meu caso já estou usando underscorejs, então apenas altero a propriedade, depois uso _.clone(demo) antes de fazer o set.Prefiro não fazer isso, então esperarei para ver se existe uma solução mais elegante antes de fechar isso.

Foi útil?

Solução

Você não precisa definir primaryDemo de novo.No exemplo isso não faz nada.Você precisa forçar o Ember a notificar seu observador. Veja este violino...

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');

Outras dicas

Você pode dar mais detalhes?Eu criei um JSFiddle simples http://jsfiddle.net/JjbXb/ da sua descrição, mas alterar a mesma propriedade consecutivamente, como você diz, funciona.

Você tem certeza do valor primaryDemo é diferente em suas 2 ligações consecutivas?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top