2013-02-10 2 views
19

Я следующие два пути для редактирования и новые:Correct очистки код

WZ.ExercisesNewRoute = Em.Route.extend 
    model: -> 
    WZ.Exercise.createRecord() 
    deactivate: -> 
    @_super.apply this, arguments 
    @get('currentModel.transaction').rollback() 

WZ.ExercisesEditRoute = Em.Route.extend 
    model: (params) -> 
    WZ.Exercise.find(params.exercise_id) 
    serialize: (params, options) -> 
    exercise_id: params.get('id') 
    deactivate: -> 
    @_super.apply this, arguments 
    tx = @get('currentModel.transaction') 
    tx.rollback() if tx 

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

В настоящее время, если я маршрут на маршрут редактирования, а затем непосредственно на новый маршрут без сохранения, я получаю следующее сообщение об ошибке:

Uncaught Error: Attempted to handle event willSetProperty on while in state rootState.deleted.saved. Called with {reference: [object Object], store: , name: name}

+0

Вы имеете в виду на выходе из маршрута? Вы ищете что-то вроде этого: http://stackoverflow.com/questions/14797338/ember-clear-form-after-submitting –

+0

Ошибка происходит непосредственно при прямом переходе с маршрута редактирования на новый маршрут, а затем пытается изменить модель. – dagda1

+0

Эй, это старый вопрос, но вы поняли канонический способ сделать это? –

ответ

1

Этот вопрос для более старой версии данных Ember, но ответ будет иметь чтобы сначала проверить состояние для isDeleted и только откат, если запись еще не удалена.

В новых данных ember нет понятия транзакции, но вы все равно можете столкнуться с подобной проблемой, если пытаетесь отменить запись, которая еще не сохранена.

Я бы, вероятно, сделал это в событии маршрутизации router, поскольку вы можете делать такие вещи, как прервать переход, если вы хотите дать пользователю возможность сохранить изменения.

willTransition: function(transition) { 
    controller = this.get('controller') 
    if(controller.get('content.isDirty')) { 
    if(controller.get('content.isNew') && confirm('Closing this window will revert all unsaved changes.')){ 
     controller.get('content').deleteRecord(); 
    } else { 
     controller.get('content').rollback() 
    } 
    } 
    }