2012-07-31 9 views
20

Parece que si desea animar una transición entre estados que utilizan el nuevo enrutador y enrutadores Ember.js, no tiene suerte, ya que se destruirá el contenido anterior de una toma de corriente. antes de que tengas la oportunidad de animarlo. En los casos en que puede animar completamente una vista antes de pasar al nuevo estado, no hay problema. Solo es el caso en el que tanto las vistas antiguas como las nuevas deben ser visibles, lo cual es problemático.Rutas, salidas y animaciones de Ember.js

Parece que algunas de las funcionalidades necesarias para animar tanto el contenido de salida anterior y el nuevo se añadió en this commit, pero no estoy seguro de entender cómo usarlo.

También ha habido cierto debate sobre el uso de las rutas de transición/estados adicionales para modelar explícitamente el "intermedio", afirma que las animaciones pueden representar (here y here), pero no estoy seguro si es posible en la actualidad para que coincida con este enfoque con controladores y vistas con salida.

Esto es similar a How *not* to destroy View when exiting a route in Ember.js, pero no estoy seguro de anular el outlet helper es una buena solución.

¿Alguna idea?

+0

relacionada [Ember.js Router: Cómo animar las transiciones de estado] (http://stackoverflow.com/questions/14521847/ember-js-router-how-to-animate-state-transitions/) –

Respuesta

7

Debe verificar esto: https://github.com/billysbilling/ember-animated-outlet.

A continuación, puede hacer esto en sus plantillas Manillares:

{{animatedOutlet name="main"}} 

y la transición desde el interior de una ruta como esta:

App.ApplicationRoute = Ember.Route.extend({ 
    showInvoice: function(invoice) { 
     this.transitionToAnimated('invoices.show', {main: 'slideLeft'}, invoice); 
    } 
}); 
+1

Basado en http://emberjs.com/blog/2013/08/31/ember-1-0-released.html, me siento cómodo al decir que esta es ahora la respuesta correcta; 'ember-animated-outlet'" hará su camino hacia una versión futura de Ember ". – adamesque

25

Actualmente estoy redefiniendo didInsertElement y willDestroyElement en algunas de mis clases de vista para admitir animaciones. didInsertElement inmediatamente oculta el elemento y luego lo anima a la vista. willDestroyElement clona el elemento y lo anima a que no se vea.

didInsertElement: function() 
{ 
    this.$().slideUp(0); 
    this.$().slideDown(250, "easeInOutQuad"); 
}, 

willDestroyElement: function() 
{ 
    var clone = this.$().clone(); 
    this.$().replaceWith(clone); 
    clone.slideUp(250, "easeInOutQuad"); 
} 

Personalmente, no quiero empezar a envolver mis puntos de venta en ContainerViews superfluos sólo para apoyar animaciones.

+2

Esta es una buena respuesta, pero después de leer [esto] (https://github.com /emberjs/ember.js/issues/1017) Estoy pensando en que el soporte integrado para lo que estoy pidiendo no llegará hasta v1.1. – adamesque

+0

didInsertElement: function() { this. $ ('# Top_items'). FadeOut (0); this. $ ('# Top_items'). FadeIn (1500); }, – lesyk

+1

En Ember 1.0 esto ya no funciona. La vista se destruye antes de que puedas usar replaceWith(). En su lugar, anteponte al contenedor principal de la vista. esto. $(). Parent(). Prepend (clone); – narkeeso