2013-04-22 4 views
1

Ember Data's documentation discusses different events in a model instance's lifecycle.
Я бы ожидал, что событие didUpdate запускается всякий раз при изменении свойств экземпляра модели. Но мои эксперименты не показывают этого поведения.Данные Ember: Когда срабатывает событие «didLoad»?

Вот пример JS Bin: http://jsbin.com/uziwam/9/edit
В этом примере вы можете видеть, что я зарегистрировать обработчик на «жэнь» модель, например: зарегистрировать обработчик (console.log(..) сообщения) для didLoad и didUpdate событий.

При запуске кода «ren's» didLoad происходит пожар, который ожидается поведением. Затем при использовании графического интерфейса для редактирования свойств «ren's» не запускается событие didUpdate. Это (по крайней мере для меня) неожиданное поведение.

Что мне нужно сделать, чтобы пожар didUpdate?

ответ

3

Событие didUpdate срабатывает, когда запись была успешно сохранена, это означает, что вы должны ее зафиксировать, и ваш адаптер подтвердил фиксацию.

Чтобы зафиксировать изменения записи, вы можете использовать record.get ('transaction'). Commit().

см http://jsbin.com/uziwam/11/edit

Если вы хотите совершить сделку, когда изменение свойства, вы можете поместить наблюдателя на него.

App.User = DS.Model.extend({ 
    firstName: DS.attr("string"), 
    lastName: DS.attr("string"), 

    firstNameDidChange: function(){ 
    this.get('transaction').commit(); 
    } 
}); 

Если вы хотите, чтобы обобщать на атрибут каждой записи, вы должны быть в состоянии сделать что-то вроде:

App.User = DS.Model.extend({ 
    firstName: DS.attr("string"), 
    lastName: DS.attr("string"), 

    init: function(){ 
    this._super(); 
    this.eachAttribute(function(attributeName){ 
     this.addObserver(attributeName, this, this.commitRecord); 
    }, this); 
    } 

    commitRecord: function(){ 
    this.get('transaction').commit(); 
    } 
}); 

http://jsbin.com/uziwam/14/edit

+0

Спасибо за пояснения и рабочий пример! ... есть ли простой способ совершить транзакцию прямо в тот момент, когда свойство изменилось (... то есть, так что нет необходимости в инициированном пользователем 'save')? – Abdull

+1

@Abdull см. Мой обновленный ответ. –

Смежные вопросы