La propriété calculée observée ne se déclenche pas si elle est modifiée deux fois de suite
-
12-11-2019 - |
Question
J'ai un Ember.Object que je mets à jour avec une propriété comme ci-dessous, mais si je change de PrimaryDemo deux fois de suite, il ne se déclenche pas, mais si je change de PrimaryDemo, puis Rate, cela change.Je ne sais pas pourquoi et comment je peux y remédier.
dependantChanged: function() {
console.log('Firing change');
this.get('_update')(this);
}.observes('primaryDemo', 'Rate', 'Totals'),
MISE À JOUR:Donc, la première réponse et le violon m'ont fait réfléchir à l'origine du problème, et cela est dû à la modification d'une propriété sur un objet et non à l'objet lui-même.Je pense qu'Ember effectue une vérification de hachage pour voir s'il y a une différence.Dans mon cas, j'utilise déjà underscorejs, donc je change simplement la propriété, puis j'utilise _.clone(demo) avant de faire l'ensemble.Je préfère ne pas faire cela, alors j'attendrai de voir s'il existe une solution plus élégante avant de fermer ceci.
La solution
Vous n'avez pas besoin de définir primaryDemo
encore.Dans le exemple ça ne fait rien.Vous devez forcer à dire à Ember d'avertir votre observateur. Voir ce violon...
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');
Autres conseils
Pouvez-vous donner plus de détails? J'ai créé un simple jsfiddle http://jsfiddle.net/jjbxb/ De votre description mais modifier la même propriété dans une ligne, comme vous le dites, fonctionne.
Êtes-vous sûr de la valeur de primaryDemo
est différent dans vos 2 appels consécutifs?