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 originalpackage
{
public class Registry
{
private var _values:Object;
private static var _self:Registry;
public function Registry(singleton:SingletonEnforcer) {
if(singleton == null) {
throw new Error("Esta clase no puede ser instanciada desde el constructor.");
}
_values = new Object();
}
public static function getInstance():Registry {
if(_self == null) {
_self = new Registry(new SingletonEnforcer());
}
return _self;
}
public function setValue(key:String, value:Object):void {
_values[key] = value;
}
public function getValue(key:String):Object {
return _values[key];
}
}
}
class SingletonEnforcer
{
}
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//Error !
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//Correcto !
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<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*" initialize="init()">
<mx:Script>
<![CDATA[
private function init():void {
Registry.getInstance().setValue("id", 1);
Registry.getInstance().setValue("name", "yimosama");
}
]]>
</mx:Script>
<mx:ModuleLoader>
<local:Modulo />
</mx:ModuleLoader>
</mx:Application>
Modulo:
Código actionscript:
Ver original<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300">
<mx:Script>
<![CDATA[
private function onClick():void {
trace(Registry.getInstance().getValue("id"));
trace(Registry.getInstance().getValue("name"));
}
]]>
</mx:Script>
<mx:Button x="167" y="65" label="Button" click="onClick()"/>
</mx:Module>
Culquier duda, estamos pendientes.
Un saludote !