如果连续两次更改,则观察到的计算属性不会触发

时间:2012-02-25 16:15:10

标签: ember.js

我有一个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)。我宁愿不这样做,所以在关闭它之前会等待看看是否有更优雅的解决方案。

2 个答案:

答案 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的价值是否有所不同?