2013-08-25 2 views
0

Я пишу приложение Ember, которое позволяет пользователю изменять данные и автоматически фиксировать изменения на бэкэнд, не нажимая кнопку «Сохранить». Я столкнулся странные проблемы, когда в этом кодеДанные Ember: Когда изменения автообновления?

record.set(key, newValue); 
record.get('store').commit(); 

метод commit() вызывается первым, прежде чем запись добавляется в updated ведро. Если я задержать commit()

record.set(key, newValue); 
setTimeout(function() { 
    record.get('store').commit(); 
}, 1); 

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

+0

Откуда вы знаете, что данные не сохранены. Вы делаете record.set ('foo', 'bar'); . Record.get ('магазин') совершить(); и record.get ('foo'); возвращает undefined? –

ответ

0

он отлично работает, но не чувствует себя надлежащим способом делать вещи в Эмбере. Есть ли какое-либо событие, которое уведомляет, когда запись готова к сохранению?

Существует флаг вы можете настроить наблюдатель на, это isDirty свойства, которое указует на записи есть локальные изменения, которые еще не совершили больше, пример:

App.MyModel = DS.Model.extend({ 
    ... 
    isDirtyChanged: function() { 
    if(this.get('isDirty')) { 
     this.get('store').commit(); 
    } 
    }.observes('isDirty') 
}); 

Тогда после вызова:

record.set(key, newValue); 

isDirtyChanged вызывается автоматически из-за наблюдателя, который мы установили, проверяя свойство isDirty и совершая, если это правда.

Вы также можете проверить здесь для большего количества событий жизненного цикла и свойства: http://emberjs.com/guides/models/model-lifecycle/

Смотрите также здесь для demo (у него есть некоторые другие вещи, но, пожалуйста, сосредоточены только на Author модели и как наблюдатель установки, а также на PostController и в функции update) введите что-то в поле ввода под именем автора и нажмите кнопку Update, теперь смотрите журналы консоли.

Надеюсь, это поможет.

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