Por: Zah + 04.10.2007
Código :
//Aquí recibimos los datos del servidor
public function result(data:Object):void
{
for each (var item : Object in data.result.categories)
{
var category:CategoryVO = new CategoryVO ();
category.name = item.name;
category.tags = new ArrayCollection(item.tags);
category.versions = item.versions;
...
}
...
Código :
package com.cristalab.resourcebrowser.utils
{
/**Esta clase contiene funciones para la conversión de distintos tips de datos.*/
public class DataConvert
{
/**Esta función sirve para convertir un objeto cualquiera
* en una instancia de una clase.
* @param value El objeto que queremos parsear.
* @param tClass El nombre de la clase en la que queremos transformar el objeto.
* @return Una instancia de la clase que hemos pedido */
public static function objectToClass(value:Object, tClass:Class):Object
{
//Creamos una instancia de la clase
var newClass:Object;
newClass = new tClass();
//Usamos el bucle "for in", que nos permitirá recorrer tanto
// las propiedades del objeto, como sus valores.
for(var i:String in value)
{
//Usamos la función de la clase Object hasOwnProperty para
//saber si hemos definido esa propiedad en la clase.
if( newClass.hasOwnProperty(i) )
{
try
{
//Le asignamos las propiedades del objeto
//a la nueva instancia de la clase.
tClass(newClass)[i] = value[i];
}
catch(err:Error)
{
//Si estamos tratando de parsear una propiedad con un tipo de
//datos distinto, mostramos un error.
throw new Error("Error setting " + i + " to the new class. Incompatible datatypes. \n" + err.message);
}
}
}
return newClass;
}
}
}
Código :
...
for each (var item : Object in data.result.categories)
{
var category : CategoryVO = DataConvert.objectToClass(item,CategoryVO) as CategoryVO;
//var category:CategoryVO = new CategoryVO ();
//category.name = item.name;
//category.tags = new ArrayCollection(item.tags);
//category.versions = item.versions;
...
}
...
Código :
package com.cristalab.resourcebrowser.utils
{
import com.cristalab.resourcebrowser.utils.ClassLinker
import flash.utils.describeType;
import flash.utils.getDefinitionByName
/**Esta clase contiene funciones para la conversión de distintos tips de datos.*/
public class DataConvert
{
/**Esta función sirve para convertir un objeto cualquiera
* en una instancia de una clase.
* @param value El objeto que queremos parsear.
* @param tClass El nombre de la clase en la que queremos transformar el objeto.
* @return Una instancia de la clase que hemos pedido */
public static function objectToClass(value:Object, tClass:Class):Object
{
//Creamos una instancia de la clase
var newClass:Object;
newClass = new tClass();
//Usamos el bucle "for in", que nos permitirá recorrer tanto
// las propiedades del objeto, como sus valores.
for(var i:String in value)
{
//Usamos la función de la clase Object hasOwnProperty para
//saber si hemos definido esa propiedad en la clase.
if( newClass.hasOwnProperty(i) )
{
try
{
//Sacamos cual va a ser el tipo de la variable de la clase usando la sintaxis
//E4X de AS3
var targetType : Class = getDefinitionByName (String(describeType (newClass).accessor.(@name == i).@type)) as Class;
tClass(newClass)[i] = value[i] as targetType;
//Le asignamos las propiedades del objeto
//a la nueva instancia de la clase, intentando que sea del tipo
//apropiado.
}
catch(err:Error)
{
//Si estamos tratando de parsear una propiedad con un tipo de
//datos distinto, mostramos un error.
throw new Error("Error setting " + i + " to the new class. Incompatible datatypes. \n" + err.message);
}
}
}
return newClass;
}
}
}
Código :
package com.cristalab.resourcebrowser.utils
{
import com.cristalab.resourcebrowser.vos.CategoryVO;
import mx.collections.ArrayCollection;
import mx.collections.ListCollectionView;
public class ClassLinker
{
private var category : CategoryVO
private var coll : ArrayCollection
private var list : ListCollectionView;
}
}