观察Ember数据的任何属性的变化

时间:2015-03-17 22:05:37

标签: ember.js ember-data

这可能吗?像.observes('_data')这样的东西,但不是。

用例是,我有一个Decays mixin,其中有一些CP表示自模型更新以来已经过了多长时间。我希望这些CP能够更新,如果任何模型的attrs已经改变。 isDirty也不起作用,因为我的用例使用store.push来更新模型。

1 个答案:

答案 0 :(得分:1)

我认为没有内置的方法可以做到,但制作一个并不是很困难。只需为所有模型创建基类并覆盖set函数。像这样:

var BaseModel = DS.Model.extend({
    set: function(keyName, value) {
        var ret = this._super.apply(this, arguments);
        var attributes = Ember.get(this.constructor, 'attributes');

        if (attributes[keyName]) {
            this.trigger('attributeChanged');
        }

        return ret;
    }
});

然后,您可以监听对此类属性的更改:

model.on('attributeChanged', function() {});

我认为你甚至可以在控制器或类似对象的情况下做这样的事情(虽然我还没有测试过):

Controller.extend(Ember.Evented, {
    modelPropertyChanged: function() {

    }.on('model.attributeChanged')
});