2012-06-07 7 views
12

Gibt es eine Möglichkeit, eine Änderung in ein Ember-Datenmodell einfach rückgängig zu machen?Änderung am Glutendatenmodell zurücksetzen

Ich habe ein Modell an eine Bearbeitungsansicht gebunden. In dieser Ansicht kann der Benutzer die Bearbeitung abbrechen. An diesem Punkt möchte ich die Änderungen am Modell wiederherstellen. Gibt es einen einfachen Weg, dies zu tun, ohne alle Werte von der Seite zu klonen?

+2

'Objekt .get ('transaction'). rollback() ' –

Antwort

6

Ember Data unterstützt das Konzept von Transaktionen. Wir können eine Transaktion erstellen und ihnen Ember-Datensätze zuordnen. Wenn wir die Änderungen rückgängig machen wollen, können wir die rollback() - Methode für Transaktionen aufrufen. Auch wenn wir keine explizite Transaktion erstellen, werden die Datensätze einer Standardtransaktion zugewiesen, die zurückgesetzt werden kann, indem die rollback() -Methode für das DS.store-Objekt selbst aufgerufen wird.

+2

Danke! Der Vollständigkeit halber gibt es eine nette Zusammenfassung der Transaktionen in den Ember-Datenquellen. Lesen Sie den Kommentarblock über der Definition von DS.Transaction – outside2344

+1

Der Kommentarblock für die Transaktion besagt auch, dass wir im Falle einer Standardtransaktion ein "Commit" oder "Rollback" direkt auf das Store-Objekt ausführen können. Wenn ich versuche, einen Rollback durchzuführen, erhalte ich einen Fehler: TypeError: Objekt <(Unterklasse von DS.Store): ember1117> hat keine Methode 'Rollback' Irgendwelche Hilfe dabei? – inertia

5

Der Name der Standardtransaktion heißt 'defaultTransaction'. Wenn Embers festgeschrieben wird, verwendet es diese Standardtransaktion. Ich kann das Rollback direkt im Store nicht direkt verwenden.

Statt store.rollback zu verwenden, sollten Sie so etwas wie haben:

store.get('defaultTransaction').rollback() 

oder (wenn Sie in einem Router Event-Manager sind)

event.get('store.defaultTransaction').rollback() 
2

Sie tun könnten, auch eine rollback auf die Modell selbst wenn es in einem "isDirty" Zustand ist.

this.get('model').rollback(); 

Beispiel

export default Ember.ObjectController.extend({ 

actions: { 
    cancelEditModel: function(){ 

     this.get('model').rollback(); 

     this.transitionToRoute('...'); 

     return false; 
    } 
    } 
}); 
10

ab Ember Daten Version 2 gibt es keine Transaktionen mehr, aber Sie können Modelle in ihren letzten Status zurücksetzen, bevor gespeichert Ausgaben mit:

model.rollbackAttributes(); 
Verwandte Themen