Como reverter as alterações de relacionamento em EmberData

Eu tenho dois modelos com relacionamento pai-filho: treinamento e exercício:

App.Training = DS.Model.extend({
  exercises: DS.hasMany('App.Exercise')
})

App.Exercise = DS.Model.extend({
  training: DS.belongsTo('App.Training')
})

Eu quero ter uma página onde um treinamento com todos os seus exercícios relacionados é exibido. Se o usuário pressionar oEdit botão, a página torna-se editável com a possibilidade de adicionar novos exercícios. Eu também quero ter umCancel botão que descarta todas as alterações feitas.

Aqui está meu controlador:

App.TrainingsShowController = Em.ObjectController.extend({
  editing: false,

  edit: function() {
    this.set('editing', true);
    transaction = this.get('store').transaction();
    transaction.add(this.get('model'));
    this.get('model.exercises').forEach(function(x){
      transaction.add(x);
    });
  },

  cancel: function() {
    this.set('editing', false);
    this.get('model.transaction').rollback();
  },

  save: function() {
    this.set('editing', false);
    this.get('model.transaction').commit();
  },

  addExercise: function() {
    this.get('model.exercises').createRecord({});
  }
})

Existem quatro manipuladores de eventos no controlador:

edit: O usuário pressionou oEdit botão: uma transação é criada, a página é colocada no modo "Edição".cancel: O usuário pressionou oCancel botão: transação é revertida e volta ao modo "Normal".save: O usuário pressionou oSave botão: transação é confirmada e volta ao modo "Normal".addExercise: O usuário pressionou oAdd exercise Botão: um novo exercício é criado (na mesma transação) e adicionado aos treinamentos.

A funcionalidade de reversão funciona bem, exceto para registros recém-criados: se eu pressionar oEdit botão, adicionar um novo exercício e empurre oCancel botão, o exercício recém-criado fica na página.

Qual é a melhor maneira de se livrar do registro infantil descartado?

ATUALIZAR:

Eu criei um jsFiddle para reproduzir o problema, mas funcionou. Ao contrário do meu aplicativo aqui eu useiDS.FixtureAdapter: http://jsfiddle.net/tothda/LaXLG/13/

Então eu criei um outro usandoDS.RESTAdapter e o problema apareceu:http://jsfiddle.net/tothda/qwZc4/5/

No violino, tente: Editar, Adicionar novo e, em seguida, Reverter.

Eu descobri que, no caso do RESTAdapter, quando eu adiciono um novo registro filho a umhasMany relacionamento, o registro pai não ficará sujo. O que parece bom, mas quando eu reverter a transação, o registro filho recém-criado permanece no paiManyArray.

Eu ainda não sei qual é a melhor maneira de lidar com a situação.

questionAnswers(4)

yourAnswerToTheQuestion