Задача такая - есть грид с двумя колонками. Первая колонка - ключ, вторая - значение. Значение может быть как текстовым, так и булевым или выбираться из списка.
сделал небольшой примерчик, который моделирует такую ситуацию:
grid = Ext.create('Ext.grid.Panel', {
.........
columns: [
......
//изначально создаем редактируемое текстовое поле
{header: 'Director', dataIndex: 'director', field:{allowBlank: false, width:'10px'}},
//комбобокс, по событию выбора будем менять editor
{header: 'Genre', dataIndex: 'genre', sortable: true,
field:{
xtype: 'combobox',
selectOnTab: true,
listClass: 'x-combo-list-small',
store:[
['1', '1'],
['2', '2'],
['3', '3'],
['4', '4'],
],
listeners: {
select: function(combo, record, index)
{
var cm = grid.getView().getGridColumns();
var valCol = cm[0];
//если значение равняется 3 - изменяем editor на combobox
if(combo.value == '3')
{
valCol.setEditor({
xtype: 'combobox',
allowBlank: false,
selectOnTab: true,
listClass: 'x-combo-list-small',
store:[
['1', '1'],
['2', '2'],
['3', '3'],
['4', '4'],
]
});
}
//если значение равняется 2 - editor на textfield
if(combo.value == '2')
{
valCol.setEditor({
xtype: 'textfield'
})
}
//если значение равняется 4 - editor на numberfield
if(combo.value == '4')
{
valCol.setEditor({
xtype: 'numberfield'
})
}
}
}
}}
Самое интересное в том, что если мы сначала выберем значение из комбо (например "3" для наглядности) - editor заменится, но вот после того как мы кликнем на первой колонке и попадем в editor - он заменяться перестает.
Т.е. если сначала выбрать 3 -> кликнуть на первом поле -> появится combobox -> выбрать 2 -> кликнуть на первом поле -> останется тот же комбо, которое почему то не заменилось на текстовое поле.
Пробовал вызвать принудительно реконфигурацию для грида - не помогло.