2015-03-17 4 views
0

Возможно ли это? Что-то вроде .observes('_data'), но нет.Обратите внимание на изменения в отношении любого атрибута данных Ember

Вариант использования, у меня есть смеситель Decays, в котором есть несколько CP, которые говорят, сколько времени прошло с момента обновления модели. Я бы хотел, чтобы эти CP могли обновляться, если какой-либо из attrs модели изменился. isDirty также не будет работать, так как мой пример использования использует store.push для обновления модели.

ответ

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') 
}); 
Смежные вопросы