Ajustar Value Objects
A la hora de crear apliaciones en Cairngorm suelo utilizar Value Objects (VO) distintos para los listados que para la edición. De esta forma puedo tener un listado de objetos que no tarde mucho al cargar y a la hora de editar cargar toda la información del elemento que quiero editar. Hasta aquí sin problema, pero los problemas empiezan cuando quieres guardar la información. Por un lado tu envias al servidor un objeto con toda la información que has editado, pero por otro lado necesitas actualizar los datos del modelo solo con las propiedades del VO que necesitas para el listado.
Hasta ahora creaba objetos nuevos del tipo de listado y pasaba las propiedades una a una, pero ahora he añadido una función estática a mis VOs de forma que puedo pasar cualquier VO a otro solo utilizando las propiedades que tenga el primero.
La función sería algo así:
-
public static function fit(obj:Object):tipoVO
-
{
-
var fitItem:tipoVO=new tipoVO();
-
var fitItemInfo:Object=ObjectUtil.getClassInfo(fitItem);
-
var props:Array=fitItemInfo.properties;
-
for each (var prop:Object in props)
-
{
-
if (obj.hasOwnProperty(prop.localName))
-
{
-
fitItem[prop.localName]=obj[prop.localName];
-
}
-
}
-
return fitItem;
-
}
En esta función se sustituiría el tipoVO por el tipo de la clase del VO en la que se defina la función.
Básicamente cogemos la información del objeto que vamos a devolver utilizando la función getClassinfo de la clase mx.utils.ObjectUtil. Esta función devuelve un objeto en el que se almacenan el nombre de la clase y las propiedades de la misma.
Con esta información recorremos las propiedades y si existen en el objeto que sirve origen le pasamos los valores en al objeto de destino.
