2012-06-07 5 views
12

Есть ли способ легко вернуть изменение в модель Ember Data?Отменить изменение модели данных ember

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

+2

объекта ' .get ('transaction'). rollback() ' –

ответ

6

Ember Data поддерживает концепцию транзакций. Мы можем создать транзакцию и присвоить им записи данных Ember, и если мы хотим отменить изменения, мы можем вызвать метод rollback() транзакций. Также, если мы не создаем явную транзакцию, записи присваиваются транзакции по умолчанию, которая может быть отброшена путем вызова метода rollback() самого объекта DS.store.

+2

Спасибо! Для полноты, есть хорошая запись транзакций в источниках Ember Data. Прочитайте блок комментариев над определением DS.Transaction – outside2344

+1

Блок комментариев для транзакции также говорит, что мы можем запускать «фиксацию» или «откат» непосредственно на объект хранилища в случае транзакции по умолчанию. Когда я пытаюсь выполнить откат, я получаю сообщение об ошибке: TypeError: Object <(подкласс DS.Store): ember1117> не имеет метода 'rollback' Любая помощь с этим? – inertia

5

Имя транзакции по умолчанию называется «defaultTransaction». Фактически, когда Embers совершает, он использует эту транзакцию по умолчанию. Я не могу напрямую использовать откаты непосредственно в магазине.

Вместо использования store.rollback, вы должны иметь что-то вроде:

store.get('defaultTransaction').rollback() 

или (если вы в качестве менеджера маршрутизатор событий)

event.get('store.defaultTransaction').rollback() 
2

Вы можете также сделать rollback на сама модель, если она находится в состоянии «isDirty».

this.get('model').rollback(); 

Пример

export default Ember.ObjectController.extend({ 

actions: { 
    cancelEditModel: function(){ 

     this.get('model').rollback(); 

     this.transitionToRoute('...'); 

     return false; 
    } 
    } 
}); 
10

Начиная от Ember данных версии 2, не являются сделки больше, но вы можете сбросить модели до последнего состояния, прежде чем сохраненные издания с:

model.rollbackAttributes(); 
Смежные вопросы