2012-05-13 11 views
8

Estoy tratando de lograr algo que supongo que tiene una respuesta simple, pero de alguna manera no puedo encontrarlo leyendo el código fuente de ember-data.Configurar una devolución de llamada después de una transacción ha cometido

Me gustaría activar una acción después de que un conjunto particular de modificaciones se haya confirmado en el almacén de datos. Este mi código actual:

var transaction = App.store.transaction(); 
user = App.get('currentUser'); 
transaction.add(user); 
user.set('name', "Michael Jackson"); 
transaction.commit(); 
App.navigate('dashboard'); 

Mi primer intento fue añadir un observador sobre la propiedad de este usuario isDirty, pero a) no parece idiomática y lo más importante b) tendría que eliminar manualmente dicho observador en la end: es propenso a errores si se produce una excepción entre ellos y no se elimina, por ejemplo.

¿Alguna idea? ¿Cómo harías esto?

Respuesta

6

Puede usar didCreate y didUpdate en el modelo. Supongo que tiene un modelo de usuario, algo así como:

MyApp.User = DS.Model.extend({ 
    first: DS.attr('string'), 
    page: DS.attr('string'), 
    didUpdate: function() { 
    //Do something 
    }, 
    didCreate: function() { 
    //do something 
    } 
}); 
+0

Wow. Me siento muy estupido. No encontré esto antes: | - ¡Está justo en el léame! https://github.com/emberjs/data#record-lifecycle Gracias! – josepjaume

+7

El problema es que esta lógica no pertenece al modelo en sí. Debe pertenecer a ese contexto específico. Ember introdujo recientemente una devolución de llamada de eventos de una sola vez que podría ser útil en este caso: https://github.com/emberjs/ember.js/commit/1809e65012b93c0a530bfcb95eec22d972069745#L0R19 así que podría fácilmente: model.one ('didCreate', function() {whatever}); – josepjaume

+2

Quiero crear una imagen global de cargador AJAX que solo se desplaza cuando hay una confirmación, para cualquier modelo. ¿Cómo puede hacerse esto? –

Cuestiones relacionadas