2012-06-07 6 views
12

C'è un modo per ripristinare facilmente una modifica ad un modello di dati di Ember?Ripristina il cambiamento nel modello di dati di brace

Ho un modello associato a una vista di modifica. Questa vista consente all'utente di annullare la modifica, a quel punto vorrei ripristinare le modifiche al modello. C'è un modo semplice per farlo senza clonare tutti i valori dalla parte?

+2

'oggetto .get ('transazione'). rollback() ' –

risposta

6

Ember Data supporta il concetto di transazioni. Possiamo creare una transazione e assegnare loro i record di dati di rame e se vogliamo annullare le modifiche possiamo chiamare il metodo di rollback delle transazioni(). Inoltre, se non creiamo una transazione esplicita, i record vengono assegnati a una transazione predefinita che può essere ripristinata chiamando il metodo rollback() sull'oggetto DS.store stesso.

+2

Grazie! Per completezza, c'è una bella annotazione delle transazioni nelle fonti di Ember Data. Leggi il blocco dei commenti sopra la definizione di DS.Transaction – outside2344

+1

Il blocco dei commenti per la transazione dice anche che possiamo eseguire un "commit" o "rollback" direttamente sull'oggetto del negozio in caso di transazione predefinita. Quando provo a eseguire un rollback, viene visualizzato un messaggio di errore: TypeError: Object <(sottoclasse di DS.Store): ember1117> non ha alcun metodo 'rollback' Qualsiasi aiuto con questo? – inertia

5

Il nome della transazione predefinita è denominato "defaultTransaction". Infatti, quando Embers si impegna, utilizza questa transazione predefinita. Non è possibile utilizzare direttamente il rollback direttamente nel negozio.

Invece di usare store.rollback, si dovrebbe avere qualcosa di simile:

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

o (se siete in un gestore di eventi router)

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

Si potrebbe anche fare un rollback sul modello stesso se si trova in uno stato "IsDirty".

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

Esempio

export default Ember.ObjectController.extend({ 

actions: { 
    cancelEditModel: function(){ 

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

     this.transitionToRoute('...'); 

     return false; 
    } 
    } 
}); 
10

A partire da Ember dati versione 2, non ci sono operazioni di più, ma è possibile reimpostare i modelli del loro ultimo stato edizioni prima salvati con:

model.rollbackAttributes(); 
Problemi correlati