Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/03/2009, 11:28
Avatar de jahepi
jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 4 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.