Показать сообщение отдельно
  #1 (permalink)  
Старый 18.08.2011, 15:41
Аспирант
Отправить личное сообщение для Black_Prince Посмотреть профиль Найти все сообщения от Black_Prince
 
Регистрация: 11.07.2011
Сообщений: 64

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 -> кликнуть на первом поле -> останется тот же комбо, которое почему то не заменилось на текстовое поле.

Пробовал вызвать принудительно реконфигурацию для грида - не помогло.
Ответить с цитированием