2012-07-07 10 views
6

Aquí hay un ejemplo usando el enrutador emberjs http://jsbin.com/agameq/edit. Ahora quiero tener alguna animación de presentación, como fadeIn o fadeOut, cuando la ruta cambió. ¿que debería hacer?¿Puedo dar a la vista una animación de presentación en emberjs

+0

He añadido recientemente un [ proyecto en GitHub] (https://github.com/MilkyWayJoe/ember-router-with-webapi) como mi propio proceso de aprendizaje, es posible que desee echar un vistazo (todavía es bastante difícil, pero voy a actualizar a medida que avance) – MilkyWayJoe

+0

@MilkyWayJoe Ok, lo haré ~ gracias ~ – aisensiy

Respuesta

9

Cada View en Ember tiene un método denominado didInsertElement:

llama cuando el elemento de la vista ha sido insertado en el DOM. Reemplace esta función para realizar cualquier configuración que requiera un elemento en el cuerpo del documento.

Todos los puntos de vista de brasa también tienen un $ que es una referencia a jQuery, por lo que puede envolver algún elemento en su opinión con ella y aplicar ningún cambio en ella, tales como:

// this will animate only the tag h2, which in your case is the title of the users view 
App.UsersView = Ember.View.extend({ 
    templateName: 'users', 
    didInsertElement: function() { 
     this.$('h2').animate({ fontSize: "3em" }, 900); 
    } 
}); 

O puede llamarlo sin argumentos (como $()) para devolver la vista actual envuelta por jQuery.

para animar una vista al entrar en esa vista/ruta, hacer esto en su App.UsersView:

// this will animate the entire view 
App.UsersView = Ember.View.extend({ 
    templateName: 'users', 
    didInsertElement: function() { 
     this.$().animate({ fontSize: "3em" }, 900); 
    } 
}); 

(Nota: mi animación es bastante escaso, pero es sólo para mostrar dónde llamar la métodos, hacer una animación real)

Aquí es una versión modificada de your JSBin

+0

Gracias. Muy interesante. No sabía que Ember implementó el elemento didInsertElement inspirado en Cocoa. ¿Tu ejemplo está usando la función jQuery.animate? Significado didInsertElement de Ember y luego pasarlo a jQuery para cosas de UX, ¿verdad? – nembleton

+1

@nembleton Eso es correcto, en ese momento estoy llamando a la función jQuery ['animate'] (http://api.jquery.com/animate/), porque Ember ya lo proporciona a sus vistas, todo lo que necesita tener es la referencia del script a jQuery – MilkyWayJoe

+0

Muchas gracias. Tu contestador resolvió mis grandes problemas. Quiero usar emberjs para hacer alguna aplicación web y el ux es realmente importante para eso. Pero en este momento la animación está usando jQuery ¿la animación puede ser reemplazada por trucos de css3? – aisensiy

5

Tras la respuesta de @MilkyWayJoe, es probable que desee ocultar la vista antes de inserti ng que, mediante el establecimiento de la propiedad a isVisiblefalse:

App.UsersView = Ember.View.extend({ 
    templateName: 'users', 

    isVisible: false, 

    didInsertElement: function() { 
     var self = this; 
     this.$().fadeIn(700, function(){ 
      self.set('isVisible', true); //inform observers of `isVisible` 
     }); 
    } 
}); 

O utilice this animation Mixin, lo que le permite animar Vistas cambiando un conjunto de propiedades CSS observados:

App.UsersView = Ember.View.extend(JQ.Animate, { 
    templateName: 'users', 

    isVisible: false, 

    // Observed CSS properties 
    cssProperties: ['display'], 

    // Optional animation properties 
    duration: 700, 
    easing: 'easeInOutCubic', 

    didInsertElement: function() { 
     this.set('display', 'block'); 
    }, 

    afterAnimate: function() { 
     this.set('isVisible', true); 
    } 
}); 
+0

Oh, eso es bueno. Leeré el artículo y lo intentaré. ¿Cómo se puede llegar a conocer esta información leyendo el código fuente? – aisensiy

+0

El código fuente encontrado [aquí] (http://cloud.github.com/downloads/emberjs/ember.js/ember-latest.js) (que es el último) tiene todos los comentarios en comparación con la [documentación] (http://emberjs.com/documentation/) que no se ha actualizado por completo (porque la mayoría de los esfuerzos se concentran en el [1.0 hito] (https://github.com/emberjs/ember.js/issues? labels = & milestone = 1 & page = 1 & state = open)). También sugiero a [Google para "Ember Gist"] (https://www.google.ca/#hl=en&q=ember+gist) y obtendrá varios recursos excelentes. – MilkyWayJoe

+0

Hola, ¿cómo puedo acceder a los elementos dom en el controlador ... Por ejemplo, cargo algunos elementos en el controlador y necesito cambiar el tamaño del elemento principal de los elementos. ¿Cómo puedo obtener el dom padre y establecer su ancho en el controlador? – aisensiy

Cuestiones relacionadas