我有一个Ember.Object,我正在使用下面的属性进行更新,但是如果我连续两次更改primaryDemo,它就不会触发,但如果我更改了primaryDemo,然后是Rate,它确实会改变。我很困惑为什么会这样,以及如何解决它。
dependantChanged: function() {
console.log('Firing change');
this.get('_update')(this);
}.observes('primaryDemo', 'Rate', 'Totals'),
UPDATE :所以第一个答案和小提琴让我思考问题是什么,这是由于更改了对象的属性而不是对象本身。我认为ember会进行哈希检查以确定是否存在差异。在我的情况下,我已经使用了underscorejs,所以我只是更改属性,然后在执行set之前使用_.clone(demo)。我宁愿不这样做,所以在关闭它之前会等待看看是否有更优雅的解决方案。
答案 0 :(得分:2)
您无需再次设置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');
答案 1 :(得分:1)
你能提供更多细节吗?我从你的描述中创建了一个简单的JSFiddle http://jsfiddle.net/JjbXb/,但正如你所说的那样,连续改变相同的属性。
您确定{2}连续2次来电中primaryDemo
的价值是否有所不同?