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, время: 18:37. |