- MadeInFlex - http://www.madeinflex.com -
Arquitectura de Adobe Flex 2 (III)
Publicado por Carlos Rovira el 13 de Septiembre de 2007 a las 23:02 en Componentes | No hay comentarios
Continuamos con nuestro recorrido a través del framework de Flex. En el [1] último capítulo de esta serie comentamos las interioridades del framework para ver como funcionan las cosas "detrás de las cámaras" en Flex. En esta nueva entrega veremos como extender UIComponent para realizar nuestros propios componentes. El motivo de extender UIComponent es crear una pieza que encaje a la perfección dentro del ciclo de vida de nuestra aplicación y se beneficie de la infraestructura que nos da el framework de Flex. De esta forma conseguiremos un rendimiento óptimo.
La creación de componentes para Flex es un arte en si mismo y solo la experiencia y el estudio de otros componentes nos llevará a conseguir soluciones realmente interesantes. A su vez, es muy normal que en el día a día, desarrollando con Flex necesitemos alguna funcionalidad inexistente en los componentes base de Flex. Es en ese momento cuando necesitaremos de nuestros conocimientos de la arquitectura de Flex para solventar estos problemas creando nuestras propias extensiones.
A continuación podemos ver el mínimo código necesario para crear un componente en Flex:
Como podéis ver es bastante sencillo. Ahora bien, de esta forma solo crearíamos un componente en blanco que no haría nada. Ni siquiera veríamos nada en la pantalla. En el constructor podemos añadir escuchadores de eventos que sean necesarios en el componente. Por ejemplo UIComponent aprovecha el constructor para añadir escuchadores para el teclado o el manejador del foco.
Para empezar a añadir contenido al componente podemos hacerlo sobreescribiendo el método createChildren(). Por ejemplo, en el siguiente ejemplo comenzamos llamando al método del componente padre y posteriormente añadimos un campo de texto si este todavía no ha sido creado con anterioridad por alguna super clase:
Este método será llamado por el framework de forma transparente al crear el componente. Es dentro de este método donde podemos crear cualquier sub componente o skin y añadirlo al displaylist del componente con addChild().
Seguidamente, es tiempo de definir el método measure(), el cual se encargará de gestionar los tamaños del componente (tamaño mínimo, tamaño por defecto, ...) y de los componentes hijos:
En el ejemplo indicamos que el tamaño base y mínimo deben ser de 50 pixeles tanto para el ancho como para el alto. Como vimos en el anterior artículo, siempre que queramos recalcular el tamaño del componente, llamaremos a invalidateSize(). NUNCA debemos de llamar directamente a este método. Otro método a tener en cuenta es setActualSize(), el cual se suele usar internamente para indicar el tamaño de los componentes hijos cuando se redibuja un componente.
El siguiente método es commitProperties(). Este se usa para modificar las propiedades de un componente. Gracias a este método nos aseguramos que los cambios en dichas propiedades se hacen en el orden y forma esperado por el programador. Lo normal es que cambiemos una propiedad dentro de un componente y, de paso, modifiquemos una variable flag de forma que en este método hagamos algún tipo de procesamiento necesario al cambiar la propiedad. El método de invalidación que debemos de usar para llamar a este método es invalidateProperties().
Los flags nos permiten optimizar el rendimiento de este método de forma que solo se ejecuten determinadas partes del mismo. Este método es llamado justo antes de calcular el tamaño del componente y el redibujado del mismo. También es el lugar más apropiado para crear y eliminar subcomponentes de acuerdo con cambios determinados en las propiedades.
Ha llegado el momento de visualizar el componente. Este es el método que tiene toda la carga de trabajo a la hora de representar gráficamente el estado del componente. Como cabría de esperar, NO debemos de llamarlo directamente. Debemos de invocar invalidateDisplayList() de forma que marquemos el componente para su redibujado en el próximo frame.
Como podéis ver en el ejemplo, primero llamamos al mismo método de la super clase. A partir de esta linea podemos usar este método para dibujar lo que creamos conveniente (en el ejemplo dibujamos un rectángulo), redimendionar sub componentes, cambiar estilos y, en general, todo lo que trate de cambiar la apariencia visual del componente.
Ahora ya tenemos la información básica suficiente para crear un componente desde cero. Todavía quedan otros aspectos a tener en cuenta (estilos, skinning, manejo del foco y del teclado, etc...). Pero en estos momentos ya sabemos cuales son los métodos que el framework de flex utiliza internamente para hacer su magia y podemos empezar a crear componentes que actúen dentro del sistema como si de un componente del framework se tratara.
En el siguiente artículo pondremos todo lo visto en práctica a través de un ejemplo con un componente real extendiendo de otro ya existente para reutilizar su funcionalidad. De esta forma podremos demostrar las ventajas de conocer la arquitectura de componentes de Flex y reutilizar la funcionalidad ya creada por los ingenieros de Adobe.
Artículo imprimido desde MadeInFlex: http://www.madeinflex.com
URL al articulo: http://www.madeinflex.com/2007/09/13/arquitectura-de-adobe-flex-2-iii/
URLs en esta entrada:
[1] último capítulo: http://www.madeinflex.com/2007/05/23/arquitectura-de-adobe-flex-2-ii/
[2] Creando componentes a partir de UIComponent: http://www.madeinflex.com/2007/09/13/arquitectura-de-adobe-flex-2-iii/#toc-crean
do-componentes-a-partir-de-uicomponent
[3] Añadiendo objetos: http://www.madeinflex.com/2007/09/13/arquitectura-de-adobe-flex-2-iii/#toc-anadi
endo-objetos
[4] Tamaño de los componentes: http://www.madeinflex.com/2007/09/13/arquitectura-de-adobe-flex-2-iii/#toc-taman
o-de-los-componentes
[5] Cambiando propiedades: http://www.madeinflex.com/2007/09/13/arquitectura-de-adobe-flex-2-iii/#toc-cambi
ando-propiedades
[6] Visualizando el componente: http://www.madeinflex.com/2007/09/13/arquitectura-de-adobe-flex-2-iii/#toc-visua
lizando-el-componente
[7] Conclusión: http://www.madeinflex.com/2007/09/13/arquitectura-de-adobe-flex-2-iii/#toc-concl
usion
Haz click aquí para imprimir.