Jak wycofać zmiany relacji w EmberData

Mam dwa modele z relacją rodzic-dziecko: trening i ćwiczenia:

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

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

Chcę mieć stronę, na której wyświetlane jest szkolenie ze wszystkimi powiązanymi ćwiczeniami. Jeśli użytkownik naciśnieEdit przycisk, strona staje się edytowalna z możliwością dodawania nowych ćwiczeń. Chcę też miećCancel przycisk, który odrzuca wszystkie wprowadzone zmiany.

Oto mój kontroler:

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({});
  }
})

W kontrolerze są cztery programy obsługi zdarzeń:

edit: Użytkownik nacisnąłEdit przycisk: transakcja zostaje utworzona, strona przechodzi w tryb „Edycja”.cancel: Użytkownik nacisnąłCancel przycisk: transakcja jest cofnięta i przywrócona do trybu „Normalny”.save: Użytkownik nacisnąłSave przycisk: transakcja zostaje zatwierdzona i powraca do trybu „Normalny”.addExercise: Użytkownik nacisnąłAdd exercise przycisk: nowe ćwiczenie jest tworzone (w tej samej transakcji) i dodawane do szkoleń.

Funkcja wycofywania działa dobrze z wyjątkiem nowo utworzonych rekordów: jeśli pchnęEdit przycisk, dodaj nowe ćwiczenie i naciśnijCancel przycisk, nowo utworzone ćwiczenie pozostaje na stronie.

Jaki jest najlepszy sposób na pozbycie się odrzuconego rekordu dziecka?

AKTUALIZACJA:

Stworzyłem jsFiddle, aby odtworzyć problem, ale zadziałało. W przeciwieństwie do mojej aplikacji tutaj użyłemDS.FixtureAdapter: http://jsfiddle.net/tothda/LaXLG/13/

Następnie stworzyłem inny używającDS.RESTAdapter i pojawił się problem:http://jsfiddle.net/tothda/qwZc4/5/

W skrzydle spróbuj: Edytuj, Dodaj nowy, a następnie Wycofaj.

Zorientowałem się, że w przypadku RESTAdapter, gdy dodam nowy rekord potomny do ahasMany związek, rekord rodzica nie będzie brudny. Co wydaje się w porządku, ale kiedy wycofuję transakcję, nowo utworzony rekord dziecka pozostaje w rodzicachManyArray.

Nadal nie wiem, jaki jest najlepszy sposób radzenia sobie z sytuacją.

questionAnswers(4)

yourAnswerToTheQuestion