I Modelle haben wie folgt definiert:Durchführung Rollback auf Modell mit hasMany Beziehung
App.Answer = DS.Model.extend({
name: DS.attr('string'),
layoutName: DS.attr('string')
});
App.Question = DS.Model.extend({
name: DS.attr('string'),
answers: DS.hasMany('answer', {async: true})
});
Ich habe eine Komponente, das Modell in Frage zu stellen zum Löschen und Hinzufügen von Antworten ermöglicht. Die Komponente kommt mit der Schaltfläche zum Anwenden und Abbrechen, und wenn der Benutzer auf Abbrechen klickt, wollte ich, dass alle Änderungen (Hinzufügen/Löschen von Antworten) rückgängig gemacht werden. Derzeit Rollback nicht den Trick, I-Ereignis versucht model.reload() bei der Verwendung Rest-Adapter und das hat auch nicht für mich arbeiten. Irgendeine Idee, wie ich in dieser Situation einen Rollback machen kann?
Wenn der Rest-Adapter, ich ziemlich viel fallen auf die Frage an dieser Stelle darauf: EmberJS cancel (rollback) object with HasMany
Danke, Dee
UPDATE:
Da ich nicht durchführen konnte die beabsichtigte Art und Weise Rollback , Führte ich diese Schritte aus:
1) get all the answers back from the server
2) remove answer association from the question
3) manually add answer association to the question model from data received from server
Dies scheint gut zu funktionieren aber leider Ich bekomme diesen einen Fehler, den ich nicht abschütteln kann. Hier
ist ein jsbin aktualisierter Fortschritt: http://jsbin.com/uWUmUgE/2/
Hier können Sie neue Antwort erstellen und dann hängen Sie ihn in Frage zu stellen und zu tun Rollback. ABER, wenn Sie diese Schritte befolgen, werden Sie das Problem sehe ich bin vor:
1) delete an answer
2) add an answer
3) perform rollback
4) add an answer
Es wirft diesen Fehler: Fehler: Versuchte Ereignis didSetProperty
auf, während Handhabung im Zustand root.deleted.uncommitted. Mit {name: position, oldValue: 1, originalValue: 1, value: 2} aufgerufen.
Ich werde jede Hilfe schätzen, die Sie zur Verfügung stellen können.
Behelfslösung:
Eine einfache Abhilfe war nur die Antworten auf Löschen verstecken. Ich änderte das Modell ein bisschen wie:
App.Answer = DS.Model.extend({
name: DS.attr('string'),
layoutName: DS.attr('string'),
markToDelete: DS.attr('boolean', {default: false})
});
Und meine Rollback-Funktion, diese Logik hatte:
answers.forEach(function (answer) {
if(!answer.get('id')){
//newly created answer models that has not persisted in DB
question.get('answers').removeObject(answer);
answer.deleteRecord();
} else {
answer.rollback();
}
});
Hallo @Toran danke für die Antwort. Wenn ich versuche, in meiner Komponentenaktion, die den Rollback behandelt, Kontext zu erhalten, wird die Komponenteninstanz selbst zurückgegeben. Was bekommst du in deinem Kontext? –
Ach, tut mir leid, mein Beispiel ist innerhalb einer Route (Ich habe noch nichts mit einer Komponente zu tun, also bin ich mir nicht sicher, wie das ähnlich wäre oder nicht) –