Foros del Web » Creando para Internet » Flash y Actionscript »

Paso de Parámetros entre modulos

Estas en el tema de Paso de Parámetros entre modulos en el foro de Flash y Actionscript en Foros del Web. Buenos dias, Estoy desarrollando una página que utiliza varios archivos mxml tipo módulo, quiero saber cual es la forma de pasar valores desde el archivo ...
  #1 (permalink)  
Antiguo 06/03/2009, 10:59
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Paso de Parámetros entre modulos

Buenos dias,

Estoy desarrollando una página que utiliza varios archivos mxml tipo módulo, quiero saber cual es la forma de pasar valores desde el archivo aplicación hacia un modulo. Una breve explicación de como esta programado:
Archivo aplicación: en este archivo se encuentra una forma de inicio de sesión, dependiendo el tipo de usuario que ingrese se cargara los módulos correspondientes, utilizo estados, cuando llamo los estados es cuando cargo los módulos como se muestra a continuación:
<mx:State name="state1">
<mx:RemoveChild target="sesionPanel"/>
<mx:AddChild>
<mx:ModuleLoader>
<local:Modulo1>
</mx:ModuleLoader>
</mx:AddChild>
</mx:State>
cuando cargo el modulo quiero pasar un valor que seria el Id del usuario para poder cargar la información personal en el módulo.
Espero que alguien me pueda hechar una mano con este pequeño problema. Gracias
  #2 (permalink)  
Antiguo 07/03/2009, 11:28
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Respuesta: Paso de Parámetros entre modulos

Hola yimosama !

Para estos casos hay una solución muy buena, si quieres tener datos globales en la aplicación puedes realizar una clase que implemente el patrón de diseño Singleton, vamos a darle la capacidad de poderle añadir los datos que queramos, de esta manera se convierte en una clase registro, vamos a poder registrar los datos necesariosy vamos a poder accederlos desde cualquier punto en nuestra aplicación.

Aquí hay un ejemplo de implementación de una clase Registro:
Código actionscript:
Ver original
  1. package
  2. {
  3.     public class Registry
  4.     {
  5.        
  6.         private var _values:Object;
  7.         private static var _self:Registry;
  8.        
  9.         public function Registry(singleton:SingletonEnforcer) {
  10.             if(singleton == null) {
  11.                 throw new Error("Esta clase no puede ser instanciada desde el constructor.");
  12.             }
  13.             _values = new Object();
  14.         }
  15.        
  16.         public static function getInstance():Registry {
  17.             if(_self == null) {
  18.                 _self = new Registry(new SingletonEnforcer());
  19.             }
  20.             return _self;
  21.         }
  22.        
  23.         public function setValue(key:String, value:Object):void {
  24.             _values[key] = value;
  25.         }
  26.        
  27.         public function getValue(key:String):Object {
  28.             return _values[key];
  29.         }
  30.     }
  31. }
  32.  
  33. class SingletonEnforcer
  34. {  
  35. }

Una clase que implementa el patrón Singleton solamente puede ser instanciada una sola vez, privamos al usuario de poder instanciarla directamente por medio del constructor, esto es gracias a la ayuda de una clase local llamada Singleton Enforcer que restringe al usuario de instaciarla con el constructor (new Registry), ya que no se tiene la visibilidad de la clase SingletonEnforcer en otros puntos de la aplicación (Solamente Registry puede verla), por lo tanto no se podrá pasar una instancia al constructor.

Código actionscript:
Ver original
  1. //Error !
  2. var reg:Registry = new Registry(new SingletonEnforcer());

Solo puede ser obtenida por medio del método estático getInstance, aqui como la clase Registry si tiene la visibilidad de la clase SingletonEnforcer puede ser creada sin ningún problema, este método se encarga de ver si la clase ya fue instanciada para devolverla o si no ha sido creada, inicializarla.

Código actionscript:
Ver original
  1. //Correcto !
  2. var reg:Registry = Registry.getInstance();

Todo esto se hubiera podido solucionar con un constructor privado pero As3.0 no los soporta actualmente.

Ahora un sencillo ejemplo del uso de la clase:

Punto de Entrada:
Código actionscript:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*" initialize="init()">
  3.    
  4.     <mx:Script>
  5.         <![CDATA[
  6.             private function init():void {
  7.                 Registry.getInstance().setValue("id", 1);
  8.                 Registry.getInstance().setValue("name", "yimosama");
  9.             }
  10.         ]]>
  11.     </mx:Script>
  12.    
  13.     <mx:ModuleLoader>
  14.         <local:Modulo />
  15.     </mx:ModuleLoader>
  16.    
  17. </mx:Application>

Modulo:
Código actionscript:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300">
  3.     <mx:Script>
  4.         <![CDATA[          
  5.             private function onClick():void {
  6.                 trace(Registry.getInstance().getValue("id"));
  7.                 trace(Registry.getInstance().getValue("name"));
  8.             }
  9.         ]]>
  10.     </mx:Script>
  11.     <mx:Button x="167" y="65" label="Button" click="onClick()"/>   
  12. </mx:Module>

Culquier duda, estamos pendientes.

Un saludote !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #3 (permalink)  
Antiguo 02/04/2009, 01:14
 
Fecha de Ingreso: abril-2009
Mensajes: 1
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Paso de Parámetros entre modulos

Hola, aunque lo has explicado muy bien creo qeu para mi caso no funcionaría, quiero comunicar dos módulos, pero sin que tenga que pulsar ningún button para llamar a la función que rellena el campo.
Por ejemplo
Modulo1 -> TextInput y Button
Modulo2 -> Label

Quiero que al hacer clic en el Button Label.text == TextInput.text

Muchas Gracias

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:03.