У меня есть ExtjS (4.0.7) GridPanel, который я заселяю из магазина. Значения, отображаемые в столбце GridPanel, должны иметь другое представление в зависимости от типа данных, находящихся в записи.Render динамические компоненты в ExtJS 4 GridPanel Column with Ext.create
Конечная цель состоит в том, что записи с «двойным» или «целочисленным» значением для свойства записи type
представляют собой слайдер для пользователя, который они могут настраивать, а тип «строка» просто отображает некоторый текст только для чтения.
Я создал специальный столбец для этого. Он проверяет тип в рендерере и определяет, что делать.
У меня есть «строка», работающая отлично с приведенным ниже кодом, но борясь с тем, как я могу динамически создавать и визуализировать более сложный элемент управления ползунком в столбце.
Этот упрощенный пример просто пытается отобразить Panel
с контролем даты в нем, как если бы я мог это сделать, я могу выяснить остальную часть материала слайдера.
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
}
});
Моя проблема на самом деле, как я Ext.create
компонент, и может быть это делают в колонну в GridPanel?
Спасибо всем за прекрасные ответы и варианты. Я бы наградил всех вас очками (или больше очков, чем мог бы, увеличив), если бы мог, но я думаю, что ответ Джона Райса ближе всего к тому, что я искал без явной задержки в рендерере. –