2012-06-07 26 views
12

¿Hay alguna forma de revertir un cambio a un modelo de Ember Data fácilmente?Revertir el cambio al modelo de datos de color gris

Tengo un modelo vinculado a una vista de edición. Esta vista permite al usuario cancelar la edición, en cuyo momento me gustaría revertir los cambios al modelo. ¿Hay una manera fácil de hacer esto sin clonar todos los valores por un lado?

+2

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

Respuesta

6

Ember Data admite el concepto de transacciones. Podemos crear una transacción y asignarles registros de datos Ember y, si queremos deshacer los cambios, podemos llamar al método de reversión de transacciones(). Además, si no creamos una transacción explícita, los registros se asignan a una transacción predeterminada que se puede retrotraer llamando al método rollback() en el objeto DS.store mismo.

+2

¡Gracias! Para completar, hay una buena descripción de las transacciones en las fuentes de Ember Data. Lea el bloque de comentarios sobre la definición de DS.Transaction – outside2344

+1

El bloque de comentario para la transacción también dice que podemos ejecutar un "commit" o "rollback" directamente en el objeto de la tienda en caso de una transacción predeterminada. Cuando intento hacer una reversión, aparece un error: TypeError: Object <(subclase de DS.Store): ember1117> no tiene el método 'rollback' ¿Alguna ayuda con esto? – inertia

5

El nombre de la transacción predeterminada se denomina 'defaultTransaction'. De hecho, cuando Embers se compromete, usa esta transacción predeterminada. No puedo utilizar directamente la reversión en la tienda directamente.

En lugar de utilizar store.rollback, debe tener algo como:

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

o (si se encuentra en un gestor de eventos enrutador)

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

También podría hacer un rollback en el modelo en sí mismo si está en un estado "isDirty".

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

Ejemplo

export default Ember.ObjectController.extend({ 

actions: { 
    cancelEditModel: function(){ 

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

     this.transitionToRoute('...'); 

     return false; 
    } 
    } 
}); 
10

A partir de Ember versión de datos 2, no hay transacciones más, pero puede reajustar los modelos a su último estado de ediciones antes guardados con:

model.rollbackAttributes(); 
Cuestiones relacionadas