Ho un GridPanel ExtJS (4.0.7) che sto popolando da un negozio. I valori che visualizzo nella colonna di GridPanel devono avere una vista diversa a seconda del tipo di dati presente nel record.Rendering di componenti dinamici nella colonna GridPanel ExtJS 4 con Ext.create
L'obiettivo finale è che i record con valore "doppio" o "intero" per la proprietà type
del record presentino all'utente un controllo che possono essere regolati e un tipo di "stringa" restituisce solo del testo di sola lettura.
Ho creato una Colonna personalizzata per fare questo. Ispeziona il tipo nel renderer e determina cosa renderizzare.
Ho la "stringa" che funziona bene con il codice sottostante, ma ho difficoltà a creare e rendere più complicato il controllo del cursore nella colonna.
Questo esempio semplificato sta solo cercando di rendere un Panel
con un controllo di data in esso come se riesco a farlo funzionare, posso capire il resto del materiale di scorrimento.
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
}
});
Il mio problema è davvero, come posso Ext.create
un componente, e lo hanno rendere in una colonna nel gridpanel?
Grazie a tutti per le grandi risposte e le opzioni. Premetterei tutti voi punti (o più punti di quanti ne potrei con le upvoting) se potessi, ma penso che la risposta di John Rice sia la più vicina a quello che stavo cercando senza il ritardo esplicito nel renderer. –