Исправить код очистки
У меня есть следующие два маршрута для редактирования и нового:
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
Я хотел бы знать, какой правильный код должен быть в каждом деактивировать, чтобы хранилище находилось в правильном состоянии, если пользователь не сохраняет, не сохраняет или что-то еще.
В настоящее время, если я направляюсь к маршруту редактирования, а затем прямо к новому маршруту без сохранения, я получаю следующую ошибку:
Ошибка поиска: попытка обработать событие willSetProperty
on а в состоянии rootState.deleted.saved. Вызывается с помощью {reference: [object Object], store:, name: name}
Ответы
Ответ 1
Этот вопрос предназначен для более старой версии данных ember, но ответ должен был сначала проверить состояние для isDeleted и только откат, если запись еще не удалена.
В новых данных ember нет понятия транзакции, но вы все равно можете столкнуться с подобной проблемой, если пытаетесь отменить запись, которая еще не сохраняется.
Я бы, вероятно, сделал это в событии willTransition routers, поскольку вы можете делать такие вещи, как прервать переход, если вы хотите дать пользователю возможность сохранить изменения.
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()
}
}
}