Comunicación entre componentes/modulos utilizando Singleton

28
Jan/10
3

En un post anterior (y muy antiguo) comentaba que se podía utilizar Application.application para comunicarse con la aplicación principal desde un módulo, si bien es cierto esta misma operación se puede realizar a través de eventos, lo cual sería la forma más limpia de hacerlo, hay otra, la cual sería "sucia" pero rápida que es utilizando Singleton.

Lo primero es crear esta clase, como ejemplo:

Util.as

package {
	public class Util {
		public var variableTemporal:Object;
		private static var instance:Util;
 
		public static function getInstance():Util {
			if(instance == null) {
				instance = new Util();
			}
			return instance;
		}
	}
}

Esta clase permitirá almacenar en la variable "variableTemporal" los objetos que queramos almacenar y acceder desde cualquier componente/modulo, obviamente en vez de utilizar una variable publica, podemos crear funciones setter/getter.

Luego, debemos instanciar la clase en la aplicación principal:

Prueba.mxml

 
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
creationComplete="creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
	import mx.events.FlexEvent;
 
	protected function creationCompleteHandler(event:FlexEvent):void {
		Util.getInstance();
 
		// Guardo en la variableTemporal
		// un valor para hacer la prueba
		Util.getInstance().variableTemporal = {prueba: 'Hola'};
 
	}
]]>
</fx:Script>
</s:Application>
 

Luego de esto, ya podemos utilizar nuestra clase desde cualquier componente o modulo, por ejemplo:

Prueba.mxml

 
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
creationComplete="init()">
 
<fx:Script>
	<![CDATA[
	private function init():void {
		trace("Valor variableTemporal:" + Util.getInstance().variableTemporal.prueba);
	}
	]]>
	</fx:Script>
</s:Group>
 

Ojalá les sirva de ayuda ;)

Comments (3) Trackbacks (0)
  1. petuh
    3:24 am on April 22nd, 2010

    Hola andres, tengo un caso en el que necesito asignar el contenido de una variable en otra que esta en el componente padre. Se como hacer el caso contrario, desde el padre asignar un valor a una variable del componente hijo. Podrias ayudarme? gracias

  2. Juan
    1:48 am on May 18th, 2010

    Gracias. Un buen ejemplo clarificador.

    petuh: o no has leido el artículo o no lo has entendido.

  3. Quavario
    6:35 pm on May 19th, 2010

    Thank you.. it’s the reason I came to the site,lucy

Leave a comment

No trackbacks yet.