2012-07-30 17 views
6

Para hacer un pequeño mensaje amarillo de "Guardar"/"Guardado" en la parte superior de mi aplicación, me gustaría tener una propiedad booleana que indique si cualquier registro de datos de brasas está actualmente en vuelo.ember-data: Cómo hacer un mensaje flash de guardado/guardado

yo probamos este:

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]') 

pero luego descubrí que recordCache no es observable.

No utilizo transacciones, solo App.store.commit(), así que miré App.store.get('defaultTransaction'), pero no produjo nada útil.

Estoy usando RESTAdapter, así que si puedo extenderlo para que me dé esta información, eso también funcionaría.

+0

¿Se puede observar defaultTransaction.buckets.inflight? –

+0

¿Alguna vez descubrió algo? Tengo una solución en una aplicación que estoy construyendo, pero no me gusta. Extiende la clase DS.Model y establece la propiedad didUpdate() para activar una notificación cada vez que se guarda un modelo. –

+0

No, no lo hice. ¿Por qué no publica su solución como una respuesta, incluso si se trata de un respiro? –

Respuesta

2

Bueno, podría simplemente crear un modelo base con una propiedad didUpdate que maneje mostrando su mensaje de notificación, luego haga que cada uno de sus modelos lo extienda. Es realmente una solución para salir del paso, pero funciona por el momento:

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

App.User = App.Model.extend() 

Sin embargo .... esto se activará para cada registro que se actualiza. Entonces, probablemente quiera crear su clase de notificación de tal forma que no abra más de una notificación guardada a la vez ... pero eso depende de usted.

Actualmente estoy trabajando en la implementación de algunos de los métodos básicos de validación del servidor de esta solicitud de extracción https://github.com/emberjs/data/pull/376, y espero que encuentre una forma mejor de observar el estado de las confirmaciones (y voluntad de post del curso aquí si lo hago).

4

por qué no extender el modelo, controlador y/o ver:

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') 
});​ 

De esa manera su controlador/vista sabrá cuando se guarda modelo. Se activará para los controladores Crear/Actualizar, pero para los controladores que administran las matrices no lo hará.

+0

Me gusta mucho esto en realidad, y devuelve las cosas al controlador al que pertenecen. Casi podría comenzar a hacer un simple manejo de errores también. Todavía tendrá el problema donde el controlador disparará por cada registro que se actualice ... así que en mi caso, si tengo 10 registros actualizados a la vez, obtengo 10 ventanas de alerta ... pero eso está fuera del alcance de esta pregunta, creo . –

+0

Esto es un poco incorrecto, en el sentido de que creó incendios inmediatamente, y por lo tanto no significa que persistió. didUpdate es todo lo que necesitas para configurar persisted en true. – jhorman

0

hay una solución mucho más simple a esto:.

App.MyView = Ember.View.extend({ 

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

auto $() las referencias a la representación de la vista de jQuery.

Cuestiones relacionadas