Clase para controlar los SharedObjects en Flash Lite 2.0
15 12 2006Todos aquellos que hayáis utilizado un poco los SharedObjects de Flash Lite 2.0 habréis notado que son realmente incómodos a la hora de trabajar con ellos, así que he creado una clase que funciona con addEventListener. Se podría pulir mucho más, así que se aceptan sugerencias en el código.
La clase cuenta con tres métodos públicos.
init(nombre_del_archivo:String)
Inicializa el objeto SharedObject y devuelve un evento onInitSO que nos dice si el objeto existe o no.
loadSO()
Carga el objeto SharedObject.
saveSO(objeto)
Graba el objeto SharedObject. Hay que pasarle un objeto Flash con todos los valores dentro y la clase se encarga de parsear el objeto.
Código de la clase
-
import utils.*;
-
-
/**
-
* @author Raul Jimenez
-
*/
-
class utils.SharedObjectLite extends MovieClip
-
{
-
private var dispatchEvent:Function;
-
public var addEventListener:Function;
-
public var removeEventListener:Function;
-
public var removeAllEventListeners:Function;
-
-
private var object_so:SharedObject;
-
private var wait_int:Number;
-
-
static var ON_INIT_SO = "onInitSO";
-
static var ON_SAVE_SO = "onSaveSO";
-
static var ON_LOAD_SO = "onLoadSO";
-
-
/**
-
* @since 01-nov-2006
-
* @author Raul Jimenez
-
*
-
* @usage
-
* Constructor
-
*/
-
public function SharedObjectLite()
-
{
-
GDispatcher.initialize(this);
-
-
object_so = new SharedObject();
-
-
}
-
-
/**
-
* @author Raul Jimenez
-
* @since 15-dic-2006
-
*
-
* @usage
-
*
-
*/
-
public function init(name_str:String):Void
-
{
-
trace("init()");
-
-
SharedObject.addListener(name_str, onLoad);
-
object_so = SharedObject.getLocal(name_str);
-
object_so._scope = this;
-
}
-
-
/**
-
* @author Raul Jimenez
-
* @since 15-dic-2006
-
*
-
* @usage
-
*
-
*/
-
private function onLoad(data_so:SharedObject):Void
-
{
-
trace("onLoad(): " + data_so.getSize());
-
-
var exists_bol:Boolean = new Boolean();
-
-
if (data_so.getSize() != 0)
-
{
-
exists_bol = true;
-
}
-
else
-
{
-
exists_bol = false;
-
}
-
-
data_so._scope.dispatchEvent({type:ON_INIT_SO, target:exists_bol});
-
}
-
-
/**
-
* @author Raul Jimenez
-
* @since 15-dic-2006
-
*
-
* @usage
-
*
-
*/
-
public function loadSO():Void
-
{
-
trace("loadSO()");
-
-
dispatchEvent({type:ON_LOAD_SO, target:object_so});
-
}
-
-
/**
-
* @author Raul Jimenez
-
* @since 15-dic-2006
-
*
-
* @usage
-
*
-
*/
-
public function saveSO(data_obj:Object):Void
-
{
-
trace("saveSO()");
-
-
for (var i in data_obj)
-
{
-
object_so.data[i] = data_obj[i];
-
}
-
-
object_so.data.initialized = true;
-
object_so.flush();
-
-
-
dispatchEvent({type:ON_SAVE_SO, target:"ok"});
-
}
-
}
También he creado un ejemplo por si alguien tenía dudas.







Ciao
really cool class. Just a comment on using class, developers must understand that defining classes adds has some memory overhead. So the suggestions is to keep an eye on class utilization.
Alessandro
Hi Alessandro!
Thank you for the suggestion.
Do you know where can i find some information about good techniques of classes in Flash Lite?
Im working with classes usually and it can be very useful.
Bye!
Algo es algo:
http://www.adobe.com/devnet/devices/articles/flash_lite_optimization.pdf
Saludos
Recuerdo haber leído ese PDF hace un tiempo, te da una buena idea de como hacer bien las cosas.
Aunque desgraciadamente no dice nada del tema de las clases
Deu!
Cierto me lo imprimí ayer y no dice nada de ese tema, en cierto modo es normal si se considera que no recomiendan situar mucho codigo en un mismo frame. Normalmente yo empleo clases para gestión de aspectos generales y el codigo “funcional” de cada pantalla lo aplico en cada frame para repartirlo lo mejor posible. Hasta la fecha no he tenido problemas de rendimiento, pero tampoco he realizado proyectos que requieren un uso de procesador importante.