Rendern Sie dynamische Komponenten in ExtJS 4 GridPanel Column mit Ext.create
Ich habe ein ExtJS (4.0.7) GridPanel, das ich aus einem Geschäft befülle. Die Werte, die ich in der GridPanel-Spalte anzeige, müssen je nach Art der Daten im Datensatz eine andere Ansicht haben.
Das ultimative Ziel ist, dass Datensätze mit dem Wert "double" oder "integer" für die Datensätze erstellt werdentype
Diese Eigenschaft bietet dem Benutzer einen Schieberegler, den er anpassen kann, und eine Art "Zeichenfolge" gibt nur schreibgeschützten Text aus.
Ich habe eine benutzerdefinierte Spalte erstellt, um dies zu tun. Es überprüft den Typ im Renderer und bestimmt, was gerendert werden soll.
Ich habe die "Zeichenfolge" gut mit dem Code unten, aber Probleme damit, wie ich das kompliziertere Schieberegler-Steuerelement in der Spalte dynamisch erstellen und rendern kann.
Dieses vereinfachte Beispiel versucht nur, a zu rendernPanel
Mit einer Datumskontrolle, als ob ich das in Gang bringen könnte, kann ich den Rest des Slider-Materials herausfinden.
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
}
});
Mein Problem ist wirklich, wie kann ichExt.create
eine Komponente und haben es in eine Spalte im Gridpanel gerendert?