Hace tiempo que estoy haciendo pruebas y siempre echaba en falta una librería para poder crear un SlideBar y poder cambiar valores sobre la marcha. Así que aquí va la librería que uso para crear las SlideBars.
Extiende la clase Sprite así que se añade como un elemento más y se le dan valores mediante la propiedad value. Si cambia el valor lanza un evento con el cambio.
Otra función que me hacía falta. Siempre que envío datos por PHP e incluyo algún ArrayCollection guardaba el identificador único que generar Flex cada vez que crea un elemento. Así que hice esta función para quitar esa propiedad de cada elemento antes de enviarlo. Así solo se almacena la información que es necesaria.
Esta funcion la sirve para quitar los acentos en una cadena para poder usarlo en busquedas de textos. No he encontrado nada mas, así que creo que puede ser una buena solución.
Ya tenía ganas de tener algo de tiempo para meterme con Papervision3D y voy a ver si aprendo un poco como funciona y hasta donde puede llegar para utilizarlo en futuros trabajos.
Por ahora he hecho este ejemplo para ver como va en distintos ordenadores.
A la hora de ajustar comboboxes o de encontrar un elemento en un ArrayCollection he creado una pequeña función estática a la que se le pasa el ArrayCollection en el que queremos hacer la búsqueda, la propiedad en la que queremos buscar el valor y el objeto que queremos encontrar y me devuelve el index de ese item dentro del ArrayCollection.
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.
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.
Cuando en flash se crean una serie de objetos en la librería que luego serán usados indistintamente me encontré con el problema de que tenía dificultades para crearlos dinamicamente de una forma sencilla.
Imaginemos que tenemos unos botones y que necesitamos crear un menú dependiendo de una serie de datos. Los botones en la librería serían iguales, cada uno con su icono y los llamamos con distintos nombres ('Bot1', 'Bot2', etc) a la hora de crear el objeto sería largo de programar el hacer la creación de ese nuevo objeto del tipo Bot1 o Bot2 dependiendo de lo que nos haga falta, habría que hacer un switch para saber que boton necesitamos y crearlo.
Con el uso de getDefinitionByName podemos coger el nombre del botón que pasariamos en una variable y crearlo y pasarlo como MovieClip.
Aquí voy a poner una clase que me ha hecho falta. Se trata de una clase que extiende la clase Image añade un evento cuando se ha cargado que espera un frame. Si no se espera este frame no coloca la imagen y no se sabe cual es el alto y el ancho entre otras cosas.
El Stage es único para todas las clases de Actionscript que desarrollemos en una aplicación pero no siempre es accesible a nivel de clase.
Para una clase que no sea gráfica, que no extienda ni Sprite, ni MovieClip, etc. solo será accesible si se lo pasamos referenciada, en el constructor de la clase por ejemplo:
Pero para una clase que instancie Sprite por ejemplo si es accesible pero solo después de que la clase se haya añadido al propio stage o a algún elemento unido a este. Así para evitar que sea null hay que esperar a este evento y a partir de la versión 9.0.28.0 de Flash Player hay dos nuevos eventos que son ADDED_TO_STAGE y REMOVED_FROM_STAGE. Así podemos definir que el acceso al stage una vez el evento se haya alcanzado. Por ejemplo: