Tengo un ExtJS (4.0.7) GridPanel que estoy completando en una tienda. Los valores que se muestran en la columna de GridPanel deben tener una vista diferente según el tipo de datos que están en el registro.Renderizar componentes dinámicos en ExtJS 4 GridPanel Columna con Ext.create
El objetivo final es que los registros con valor "doble" o "entero" para la propiedaddel registro presentan un control deslizante al usuario que pueden ajustarse, y un tipo de "cadena" solo representa texto de solo lectura.
He creado una Columna personalizada para hacer esto. Inspecciona el tipo en el renderizador y determina qué renderizar.
Tengo la "cadena" funcionando bien con el siguiente código, pero tengo dificultades para crear dinámicamente y renderizar el control deslizante más complicado en la columna.
Este ejemplo simplificado solo está tratando de representar un Panel
con un control de fecha, como si pudiera lograrlo, puedo descifrar el resto del control deslizante.
Ext.define('MyApp.view.MyColumn', {
extend: 'Ext.grid.column.Column',
alias: ['widget.mycolumn'],
stringTemplate: new Ext.XTemplate('code to render {name} for string items'),
constructor: function(cfg){
var me = this;
me.callParent(arguments);
me.renderer = function(value, p, record) {
var data = Ext.apply({}, record.data, record.getAssociatedData());
if (data.type == "string") {
return me.renderStringFilter(data);
} else if (data.type == "double" || data.type == "integer") {
return me.renderNumericFilter(data);
} else {
log("Unknown data.type", data);
};
},
renderStringFilter: function(data) {
// this works great and does what I want
return this.stringTemplate.apply(data);
},
renderNumericFilter: function(data) {
// ***** How do I get a component I "create" to render
// ***** in it's appropriate position in the gridpanel?
// what I really want here is a slider with full behavior
// this is a placeholder for just trying to "create" something to render
var filterPanel = Ext.create('Ext.panel.Panel', {
title: 'Filters',
items: [{
xtype: 'datefield',
fieldLabel: 'date'
}],
renderTo: Ext.getBody() // this doesn't work
});
return filterPanel.html; // this doesn't work
}
});
Mi problema realmente es, ¿cómo puedo Ext.create
un componente, y tienen que rinden en una columna en el gridpanel?
Gracias a todos por las grandes respuestas y opciones. Yo les otorgaría todos los puntos (o más puntos de los que podría por votaciones ascendentes) si pudiera, pero creo que la respuesta de John Rice es la más cercana a la que estaba buscando sin el retraso explícito en el renderizador. –