Clase proxy cellrenderer
Fruto de una coversación con Carlos Rovira acerca de como poder poner distintos cellRenderer en una misma columna ha surgido esta clase.
Ha sido un buen reto, y más o menos la cosa ha salido...
De momento la clase funciona correctamente y deriva cada celda a su cellRenderer correspondiente, el problema es que al ordenar o hacer scroll algunas cosas se desmadran un poco.
Publico esta primera versión por si alguien tiene tiempo para probarla y dar opiniones al respecto. No es ni mucho menos una versión estable para producción.
Para realizar el ejemplo he aprovechado el material que Jorge Solis puso junto con su fabuloso tutorial de la cellRenderer API en flashdb. Realmente ese tutorial le abrió el submundo de los cellrenderers a muchos desarrolladores. Entre ellos yo mismo :)
La clase:
-
import mx.core.UIComponent;
-
-
/**
-
@class ProxyRenderer
-
@author Joan Garnet ( http://www.joangarnet.com )
-
@version 1.0
-
@see UIComponent
-
*/
-
class com.joangarnet.cellRenderers.ProxyRenderer extends UIComponent
-
{
-
var listOwner : MovieClip; // [DataGrid] a reference to the the DataGrid instance.
-
var getCellIndex : Function; // [Object] two properties: "columnIndex" and "itemIndex"
-
var getDataLabel : Function; // [String] this item's column name
-
-
function ProxyRenderer (){}
-
-
// @row [Object] an obect containing the whole row object ( col1.item, col2.item, etc.... )
-
// @value [??????] the item actual value. Could be a String, an Object, etc... it depends on the component to fill.
-
// @state [String] the row state (normal, highlighted or selected)
-
function setValue ( value, row:Object, state:String ):Void
-
{
-
// row can be undefined if the dataProvider.length is not long enough to populate all DataGrid rows.
-
if ( row != undefined )
-
{
-
// assign cellRenderer dynamically
-
var colIndex = getCellIndex().columnIndex;
-
var clazz = row.ProxyRendererClass[colIndex];
-
__proto__ = clazz.prototype;
-
clazz.apply ( this );
-
}
-
}
-
}
En el enlace a la descarga hay un ejemplo de como asignar las respectivas clases a cada celda.
Enlaces relacionados: * Cell Renderer API: components inside a Datagrid * TextArea cellRenderer * DataGrid Loader cellRenderer
Comments
2 Responses to “Clase proxy cellrenderer”












Hey Joan, la clase tiene una pinta fenomenal, y además es muy elegante por lo que puedo ver. Enhorabuena!
En mi caso el problema surgió debido a que estoy usando ventanas con DataGrids que se comportan como tablas de propiedades lo que implica que no todas las celdas sean del mismo estilo. Yo al final lo he resuelto de otra manera menos genérica pero que también funciona. Tengo que mirar las dos versiones y ver si se pueden combinar pues en mi caso si que funciona bien a la hora de ordenar las columnas.
Bueno ya te contaré ;)
Un saludo y gracias por tomarte el tiempo para afrontar este "reto"
C.
Hola Carlos, la verdad es que lo que pretendía era eso, hacer algo reutilizable, con la menor configuración posible, y a ser posible que no tuviera que tocar el archivo de la clase para nada una vez acabado.
Finalmente lo he conseguido, pero parece que todavía le faltan unas horas...
Cuando tenga algo de tiempo más me la miraré otra vez a ver si soluciono esos problemas, que son muy gordos.
Un DataGrid sin ordenación y sin scroll no sirve para nada XD
Si sacas algo no dudes en comunicármelo ;)
Saludos!!