grid.Panel - setEditor - работает не корректно
Задача такая - есть грид с двумя колонками. Первая колонка - ключ, вторая - значение. Значение может быть как текстовым, так и булевым или выбираться из списка.
сделал небольшой примерчик, который моделирует такую ситуацию:
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 -> кликнуть на первом поле -> останется тот же комбо, которое почему то не заменилось на текстовое поле. Пробовал вызвать принудительно реконфигурацию для грида - не помогло. |
да... тоже заметил что setEditor у них не работает...
http://joekuan.wordpress.com/2011/03...r/#comment-711 для rowEditor вроде как найдено решение, но ковыряться не стал... если у тебя всего две колонки - то почему проперти грид не используешь |
Да, пытался делать пример как раз по этой ссылке... правда там есть непонятка в
61 editor.insert(3, new_editor); 62 editor.verifyLayout(true); editor - это у него панель? или текущая строка? или текущая колонка? Как раз с этим примером setEditor изменяет editor только, если не было клика на него, повторно эта функция не отрабатывает. А на счет проперти грид - спасибо, как то просмотрел такое в примерах, буду сейчас юзать. З.Ы. в любом случае в ExtJS 4 - ошибок тьма. |
editor.insert(3, new_editor);
editor в данном случае это rowEditor - грубо говоря панель с несколькими Ext.Editor... для каждого столбца... а new_editor это просто нужный экзмепляр Ext.Editor- который вставляется в строку для указанного столбца да... в каждой версии куча недоработок... от каких то избавляются... но обязательно добавляют новые... сегодня наткнулся - что объединение заголовок грида некорректно работает с блокировкой колонки.... |
Получилось ли сделать это? Помогите, у меня такая же трабла! Экспериментировал на тройке, все заработало.
А в 4.0.2 не понимает verifyLayout и SetEditor |
Я так понял что при первом вызове едитора но уже "прикрепляется" к строке и дальнейшие изменения не вызывают рендеринг самого грида.
Получилось с помощью проперти грида. Пришлось переделывать свой код. Там конечно есть свои баги :) . Например у пропертигрида не изменяется ширина колонок, но ответ на этот баг в другой теме этого форума. |
| Часовой пояс GMT +3, время: 06:06. |