2012-05-13 17 views
8

Sto cercando di ottenere qualcosa che immagino abbia una risposta semplice ma in qualche modo non riesco a trovarlo leggendo il codice sorgente di ember-data.Configura una richiamata dopo che una transazione è stata commessa

Vorrei attivare un'azione dopo che un particolare insieme di modifiche è stato eseguito sul datastore. Questo il mio codice corrente:

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

Il mio primo tentativo è stato quello di aggiungere un osservatore sulla proprietà di questo utente isDirty, ma a) non sembra idiomatica e, soprattutto b) avrei dovuto rimuovere manualmente che di osservatore presso le end - è incline agli errori se qualche eccezione si alza in mezzo e non viene rimossa, per esempio.

Qualche idea? come lo faresti?

risposta

6

È possibile utilizzare didCreate e didUpdate sul modello. Presumo che tu abbia un modello utente così qualcosa del tipo:

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

Wow. Mi sento così stupido. Non ho trovato questo prima: | - è giusto sul readme !! https://github.com/emberjs/data#record-lifecycle Grazie !! – josepjaume

+7

Il fatto è che questa logica non appartiene al modello stesso. Dovrebbe appartenere a quel contesto specifico. Ember ha recentemente introdotto un callback evento di una volta che potrebbe essere utile in questo caso: https://github.com/emberjs/ember.js/commit/1809e65012b93c0a530bfcb95eec22d972069745#L0R19 così ho potuto facilmente: model.one ('doneCreate', function() {whatever}); – josepjaume

+2

Voglio creare un'immagine globale AJAX-loader che rotola solo quando c'è un commit in atto, per qualsiasi modello. Come si può fare? –

Problemi correlati