我有一个 Ember.Object,我正在使用如下所示的属性进行更新,但是如果我连续两次更改primaryDemo,它不会触发,但如果我更改primaryDemo,然后更改Rate,它就会发生变化。我很困惑为什么会这样以及如何解决它。

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

更新: :因此,第一个答案和小提琴让我思考问题是什么,这是由于更改了对象的属性而不是对象本身。我认为 ember 会进行哈希检查以查看是否存在差异。就我而言,我已经在使用 underscorejs,所以我只需更改属性,然后在进行设置之前使用 _.clone(demo) 。我宁愿不这样做,所以在关闭之前看看是否有更优雅的解决方案。

有帮助吗?

解决方案

你不需要设置 primaryDemo 再次。在里面 例子 那什么也没做。你需要强制告诉 Ember 通知你的观察者。 看看这个小提琴...

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

其他提示

你可以提供更多细节吗?我创建了一个简单的jsfiddle http://jsfiddle.net/jjbxb/ 从您的描述中更改相同的属性正如你所说,一排。

您是否确定了2个连续呼叫中的primaryDemo的值?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top