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

标签 ember.js

我有一个 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/

相关文章:

javascript - Ember.js - 获取 DOM 元素的模型数据

javascript - 如何在事件集合中更新绑定(bind)类

javascript - 在你的 ember.js 网络应用程序中,伪持久状态应该存在于何处?

javascript - Ember.js afterModel 钩子(Hook)触发两个相同的请求

Javascript/Ember 语法 '%@'

javascript - Ember 2.0 如何使模板和路由相互通信?

javascript - 删除关联中的所有对象

javascript - Ember 2.x DS 和关系更新

javascript - Ember isController V/s isRoute V/s isComponent

ember.js - 使用 ember.js 中的动态段获取当前路径