Подтвердить что ты не робот

Исправить код очистки

У меня есть следующие два маршрута для редактирования и нового:

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}

4b9b3361

Ответ 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()
     }
    }
  }