Al trabajar con clases Actionscript 3 en nuestros proyectos hay ocasiones en los que debemos acceder al stage principal de nuestra aplicación desde clases que no extienden a “DisplayObject”, haciendo que debamos pasar como parámetro dicho stage a las clases, esto funciona pero en realidad es un poco “sucio”.
Una solución simple es crear una clase singleton, en la cual, podemos almacenar no solo el stage principal, sino cualquier otro valor que necesitemos en varias clases. Algo así como _global de AS2, lo recuerdan?
Aquí la clase
Código :
package net.tmeister.utils { public dynamic class Global { private static var global : Global public static function getInstance() : Global { if ( global == null ) { global = new Global( arguments.callee ); } return global; } public function Global( caller : Function = null ) { if ( caller != Global.getInstance ) { throw new Error ("Global is a singleton class, use getInstance() instead"); } if ( Global.global != null ) { throw new Error( "Only one Global instance should be instantiated" ); } } } }
Y su modo de uso.
Código :
package { import flash.display.MovieClip; import net.tmeister.utils.Global public class Main extends MovieClip { private var global:Global; public function Main() { global = Global.getInstance(); global.stage = stage trace('global.stage' + global.stage) global.algunOtroValor = new MovieClip() trace('global.algunOtroValor ' + global.algunOtroValor) } } }
Simple.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Zguillez el 15 de Noviembre de 2008
Por Otaku RzO el 15 de Noviembre de 2008
Gracias por el Tip
Por HernanRivas el 15 de Noviembre de 2008
Explicaciones de porque es mala idea hay montones, pero la mejor es que genera codigo mas dificil de mantener y clases que estan linkeadas de forma poco intuitiva y por lo tanto no son facilmente rehusables.
Por M@U el 16 de Noviembre de 2008
Por Eliseo2 el 17 de Noviembre de 2008
Por UMMM el 21 de Noviembre de 2008
Por ekameleon el 06 de Diciembre de 2008
Mas facil :
//////////////
package
{
import flash.display.MovieClip;
public class Main extends MovieClip
{
private var global:Global;
public function Main()
{
global = _global ;
stage = stage ;
}
public static var global:* ;
public static var stage:Stage ;
}
}
var _global:* = this ;
//////////////
ex : http://code.google.com/p/as-gard/source/browse/trunk/AS3/trunk/src/asgard/display/ApplicationDisplay.as
El singleton no es util y a static property es muy interesente : Main.stage , Main.global
EKA+
Por Juanjo el 23 de Febrero de 2011
global.stage: null
global.algunOtroValor [object MovieClip]
¿alguien ha conseguido hacerlo funcionar?
muchas gracias