2012-07-30 3 views
6

Per fare un piccolo messaggio giallo "Salvataggio"/"Salvato" nella parte superiore della mia app, mi piacerebbe avere una proprietà booleana che indica se tutti i record di dati di bordo sono attualmente in volo.ember-data: Come effettuare un salvataggio/salvataggio messaggio flash

ho provato questo:

App.store = DS.Store.create 
    isSaving: (-> 
    for record in this.get('recordCache') 
     if record?.getPath('stateManager.currentState.name') == 'inFlight' 
     return true 
    return false 
).property('[email protected]') 

ma poi ho scoperto che recordCache non è osservabile.

Non uso transazioni, solo App.store.commit(), quindi ho guardato su App.store.get('defaultTransaction'), ma non ha prodotto nulla di utile.

Sto usando il RESTAdapter, quindi se posso estenderlo a darmi questa informazione, funzionerebbe anche questo.

+0

È possibile osservare defaultTransaction.buckets.inflight? –

+0

Hai mai capito qualcosa? Ho una soluzione in atto su un'app che sto costruendo, ma non mi piace. Estende la classe DS.Model e imposta la proprietà didUpdate() per generare una notifica ogni volta che viene salvato un modello. –

+0

No, non l'ho fatto. Perché non pubblichi la tua soluzione come risposta, anche se è uno stop-gap? –

risposta

2

Bene, è possibile semplicemente creare un modello base con una proprietà didUpdate che gestisce la visualizzazione del messaggio di notifica, quindi estendere ciascuno dei modelli. E 'davvero una soluzione tappabuchi, ma funziona per il momento:

App.Model = DS.Model.extend 
    didUpdate: -> 
     # invoke your notification 
     alert("All changes saved!") 

App.User = App.Model.extend() 

Tuttavia .... questo si attiverà per ogni record che viene aggiornato. Quindi probabilmente vorrai creare la tua classe di notifica in modo tale da non aprire più una notifica salvata in una sola volta ... ma dipende da te.

Attualmente sto lavorando all'implementazione di alcuni dei metodi di convalida server di base da questa richiesta pull https://github.com/emberjs/data/pull/376 e spero di trovare un modo migliore per osservare lo stato dei commit (e della volontà di corso post qui se lo faccio).

4

perché non estendere il modello, controller e/o vista:

DS.Model.reopen({ 
    didCreate: function() { 
     this.set('persisted', true); 
    }, 
    didUpdate: function() { 
     this.set('persisted', true);  
    }, 

    resetPersistenceFlag: function(){ 
     this.set('persisted', false); 
    }.observes('isDirty') 

}); 

Ember.Controller.reopen({ 
    contentPersistedObserver: function() { 
     if (this.get('content.persisted') === true) { 
      //do stuff here 
     } 
    }.observes('content.persisted') 
}); 

Ember.View.reopen({ 
    controllerContentPersistedObserver: function() { 
     if (this.get('controller.content.persisted') === true) { 
      //do stuff here 
     } 
    }.observes('controller.content.persisted') 
});​ 

In questo modo il controller/view saprà quando il modello viene salvato. Si attiverà per i controller Crea/Aggiorna, ma per i controller che gestiscono gli array non lo farà.

+0

Mi piace davvero molto, e rimetto le cose nel controller a cui appartengono. Potrebbe quasi iniziare a fare anche una semplice gestione degli errori. Avrà ancora il problema dove il controller scatterà per ogni record che viene aggiornato ... quindi nel mio caso se ho 10 record di aggiornamento in una sola volta ottengo 10 finestre di avviso ... ma questo è al di fuori della portata di questa domanda credo . –

+0

Questo è un po 'sbagliato, in quanto creava incendi immediatamente, e quindi non significa persistente. didUpdate è tutto ciò di cui hai bisogno per impostare persistito su true. – jhorman

0

c'è una soluzione molto più semplice a questo:.

App.MyView = Ember.View.extend({ 

    init: function() { 
     this._super(); 
     var self = this; 
     this.get('controller').content.on('didUpdate', function() { 
      self.SomeCoolUpdateFunctionForMyView(self.$()); 
     }); 
    } 
}); 

auto $() i riferimenti alla rappresentazione jquery della visualizzazione.