ember.js - tutorial - emberjs api docs
¿Hay alguna forma de obtener una devolución de llamada cuando Ember.js haya terminado de cargar todo? (5)
Estoy construyendo una aplicación Ember.js y necesito hacer una configuración adicional después de que todo se haya procesado / cargado.
¿Hay alguna manera de obtener esa devolución de llamada? ¡Gracias!
También hay varias funciones definidas en Vistas que pueden estar sobrecargadas y que serán llamadas automáticamente. Estos incluyen willInsertElement (), didInsertElement (), afterRender (), etc.
En particular, me parece que didInsertElement () es un tiempo útil para ejecutar código que en un sistema normal orientado a objetos se ejecutaría en el constructor.
La respuesta de LazyBoy es lo que quieres hacer, pero funcionará de manera diferente a como crees. La redacción de su pregunta resalta un punto interesante sobre Ember.
En su pregunta, usted especificó que deseaba una devolución de llamada después de que se presentaran las vistas. Sin embargo, para un buen estilo ''Ember'', debe usar la devolución de llamada ''lista'' que se activa después de inicializar la aplicación, pero antes de que se visualicen las vistas.
El punto conceptual importante es que después de que la devolución de llamada actualice el modelo de datos, debe dejar que Ember actualice las vistas.
Permitir que Ember actualice la vista es más sencillo. Hay algunos casos extremos en los que es necesario utilizar devoluciones de llamada ''didFoo'' para evitar parpadeos de transición de estado en la vista. (Por ejemplo, evite mostrar "no se encontraron elementos" durante 0,2 segundos).
Si eso no funciona para usted, también puede investigar la devolución de llamada ''onLoad''.
Puede usar devoluciones de llamada jQuery ajax para esto:
$(document).ajaxStart(function(){ console.log("ajax started")})
$(document).ajaxStop(function(){ console.log("ajax stopped")})
Esto funcionará para todas las solicitudes de Ajax.
Puede usar la propiedad ready
de Ember.Application
.
ejemplo de http://awardwinningfjords.com/2011/12/27/emberjs-collections.html :
// Setup a global namespace for our code.
Twitter = Em.Application.create({
// When everything is loaded.
ready: function() {
// Start polling Twitter
setInterval(function() {
Twitter.searchResults.refresh();
}, 2000);
// The default search is empty, let''s find some cats.
Twitter.searchResults.set("query", "cats");
// Call the superclass''s `ready` method.
this._super();
}
});
Simplemente pongo esto en la ruta de aplicación
actions: {
loading: function(transition, route) {
this.controllerFor(''application'').set(''isLoading'', true);
this.router.on(''didTransition'', this, function(){
this.controllerFor(''application'').set(''isLoading'', false);
});
}
}
Y luego, en cualquier lugar de mi plantilla, puedo habilitar y deshabilitar la carga de cosas usando {{#if isLoading}} o puedo agregar eventos jQuery especiales dentro de la acción de carga real.
Muy simple pero efectivo.