Saludos a todos y muchas gracias por animarse a responder.
Quiero comenzar mi aporte planteando mi opinión sobre lo que entiendo
como "navegación", pues al diseñar una aplicación Flex, debemos tener
presentes las diferencias entre aplicaciones web tradicionales y
aplicaciones RIA.
Como se sabe, la navegación en páginas web es el mecanismo en que se
dirige al usuario de una página (o vista) a otra. En el mundo web,
esto, generalmente y en sus formas más simples, se realiza
redireccionando las páginas mediante sus direcciones web (url's) una
vez ejecutada una acción, por lo que para cada página se tiene una
dirección distinta, o bien generando las páginas web dinámicamente en
el servidor mediante tecnologías de aplicaciones web, como lo son Php,
Jsp o Asp. En el mundo Flex, generalmente, esto es un poco distinto,
ya que al cargar la aplicación, en un principio, se descarga
(practicamente) la aplicación completa. Flex dispone de una gama de
componentes contenedores que son capaces de contener todas las vistas
(páginas) de la aplicación, permitiendo al usuario ir de una vista a
otra tal como lo hiciera en una aplicación de escritorio, sin recargas
de página ni redireccionamientos de url's. Entre los componentes
contenedores más utilizados puedo mencionar al TabNavigator, Accordion
y ViewStack. Sin embargo, Flex tambien puede manejar navegación entre
vistas mediante url's con algo denominado Deep Linking, permitiendo
que se registre un url distinto para cada vista de estos contenedores
mencionados y permitiendo igualmente, entre otras cosas, el uso de los
botones "Atras" y "Adelante" de los navegadores (web browsers).
Con todo lo anterior lo que persigo es hacer notar la diferencia entre
la navegación en aplicaciones web y aplicaciones RIA. Desde mi punto
de vista, implementar la navegación entre vistas como la conocemos en
las aplicaciones web sería complicar el diseño y desaprovechar las
ventajas que ofrecen las aplicaciones RIA al diseñarse, desarrollarse
y finalmente, comportarse como aplicaciones de escritorio. Sin
embargo, Flex da para eso y mucho más.
Ahora sí, a lo que vinimos.
Como se observa en varias de las respuestas, son varias las opciones
que existen para implementar una vista de autenticación. A modo de
resumen, aqui tienen una lista de algunas opciones que se mencionaron
arriba y las ordeno de menor a mayor por su grado de complejidad,
según mi criterio:
- Uso de estados (states)
- Uso de ViewStack
- Uso de modulos (Module)
- Uso de componentes personalizados (Custom Components)
Los estados se pueden entender como una colección de vistas de un
componente en la que sólo una será visible. Estos estados cambian a
criterio del programador mediante la propiedad currentState, a la cual
se asigna el nombre del estado que se desea visualizar. En los estados
se puede agregar
cualquier cantidad de componentes. Es la forma más simple de
implementar varias vistas en un mismo componente.
Los ViewStack son visualmente muy similares a los estados pero posee
ciertas ventajas con respecto a estos, como por ejemplo que permiten
ser manejados mediante sub indices en lugar de solo por nombres, las
vistas se cargan justo al momento en que son requeridas y se integran
de manera natural a otros componentes Flex. De hecho, el TabNavigator
es heredero de ViewStack. Un ejemplo, aqui:
http://flexexamples.blogspot.com/2009/09/flex-simple-navigation.html
Los módulos (Module) son sustancialmente distintos a los anteriores.
Estos son realmente aplicaciones independientes que pueden ser
cargadas y descargadas dentro de componentes contenedores, lo que
ofrece ventajas tales como una gran independencia de la aplicación
general, una gran flexibilidad al momento de diseñar aplicaciones
modulares o multiproposito, una gran comodidad al momento de hacer
mantenimiento a las aplicaciones Ria y permite optimizar el consumo de
la memoria utilizada por la aplicación, ya que estos se descargan de
la memoria cuando ya no se requiera su utilización. De esta forma, un
mismo evento podría ocacionar la descarga de un módulo en un
contenedor para cargar otro módulo distinto dentro del mismo
contenedor, simulando así la navegación. Un ejemplo, aqui:
http://livedocs.adobe.com/flex/3/html/help.html?content=modular_5.html
Los componentes personalizados son simplemente componentes hechos a la
medida, tanto en diseño como en comportamiento, en el que cada vista
se diseña como un componente y se instancian cuando se requiera y se
retiran del contenedor cuando ya no sean necesarios. Pueden contener
contenedores, módulos, eventos personalizados y cualquier otro tipo de
componente Flex.
Como sé que los autores de las dudas estan comenzando a desarrollar en
Flex, preparé un ejemplito para ilustrar de la manera más simple que
pude, el manejo de estados. Si resulta muy simple para lo que desean
hacer, escriban de nuevo y seguiremos resolviendo las dudas. La
ubicación del ejemplo:
http://groups.google.com/group/flex-air-ve/web/EjemploDeLogin.zip
Saludos. Juan Manrique.