我有一个 Ember.Object,我正在使用如下所示的属性进行更新,但是如果我连续更改 primaryDemo 两次,它不会触发,但是如果我更改 primaryDemo,然后更改 Rate,它确实会更改。我很困惑为什么会这样以及我如何解决它。
dependantChanged: function() {
console.log('Firing change');
this.get('_update')(this);
}.observes('primaryDemo', 'Rate', 'Totals'),
更新 :所以第一个答案和 fiddle 让我思考问题是什么,这是由于更改了对象的属性而不是对象本身。我认为 ember 会进行哈希检查以查看是否存在差异。就我而言,我已经在使用 underscorejs,所以我只更改属性,然后在设置之前使用 _.clone(demo)。我宁愿不这样做,所以在关闭它之前会等待看看是否有更优雅的解决方案。
最佳答案
您不需要设置 primaryDemo
再次。在 example那什么都不做。你需要强制告诉 Ember 通知你的观察者。 See this fiddle ...
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');
关于ember.js - 如果连续更改两次,则观察到的计算属性不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9445676/