【发布时间】:2012-07-04 14:23:45
【问题描述】:
我有一个从商店填充的 ExtJS (4.0.7) GridPanel。我在 GridPanel 的列中显示的值需要有不同的视图,具体取决于记录中的数据类型。
最终目标是记录的type 属性具有“double”或“integer”值的记录向用户提供他们可以调整的滑块,而“string”类型只是呈现一些只读文本.
我创建了一个自定义列来执行此操作。它检查渲染器中的类型并确定要渲染的内容。
我已经让“字符串”在下面的代码中正常工作,但在我如何动态创建和呈现列中更复杂的滑块控件时遇到了困难。
这个简化的例子只是试图渲染一个带有日期控件的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 一个组件,并让它呈现到网格面板中的列中?
【问题讨论】:
-
感谢所有人的出色回答和选择。如果可以的话,我会奖励你们所有人(或者比我更多的点数),但我认为 John Rice 的答案最接近我所寻找的,而没有渲染器中的显式延迟。
标签: javascript dynamic extjs gridpanel