Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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 -> кликнуть на первом поле -> останется тот же комбо, которое почему то не заменилось на текстовое поле.

Пробовал вызвать принудительно реконфигурацию для грида - не помогло.
Ответить с цитированием
  #2 (permalink)  
Старый 19.08.2011, 07:44
Аспирант
Отправить личное сообщение для ilshat Посмотреть профиль Найти все сообщения от ilshat
 
Регистрация: 28.07.2008
Сообщений: 67

да... тоже заметил что setEditor у них не работает...

http://joekuan.wordpress.com/2011/03...r/#comment-711

для rowEditor вроде как найдено решение, но ковыряться не стал...

если у тебя всего две колонки - то почему проперти грид не используешь
Ответить с цитированием
  #3 (permalink)  
Старый 19.08.2011, 11:06
Аспирант
Отправить личное сообщение для Black_Prince Посмотреть профиль Найти все сообщения от Black_Prince
 
Регистрация: 11.07.2011
Сообщений: 64

Да, пытался делать пример как раз по этой ссылке... правда там есть непонятка в
61 editor.insert(3, new_editor);
62 editor.verifyLayout(true);

editor - это у него панель? или текущая строка? или текущая колонка?

Как раз с этим примером setEditor изменяет editor только, если не было клика на него, повторно эта функция не отрабатывает.

А на счет проперти грид - спасибо, как то просмотрел такое в примерах, буду сейчас юзать.

З.Ы. в любом случае в ExtJS 4 - ошибок тьма.
Ответить с цитированием
  #4 (permalink)  
Старый 19.08.2011, 12:43
Аспирант
Отправить личное сообщение для ilshat Посмотреть профиль Найти все сообщения от ilshat
 
Регистрация: 28.07.2008
Сообщений: 67

editor.insert(3, new_editor);

editor в данном случае это rowEditor - грубо говоря панель с несколькими Ext.Editor... для каждого столбца...
а new_editor это просто нужный экзмепляр Ext.Editor- который вставляется в строку для указанного столбца

да... в каждой версии куча недоработок... от каких то избавляются... но обязательно добавляют новые...
сегодня наткнулся - что объединение заголовок грида некорректно работает с блокировкой колонки....
Ответить с цитированием
  #5 (permalink)  
Старый 01.11.2011, 09:50
Новичок на форуме
Отправить личное сообщение для inconnect Посмотреть профиль Найти все сообщения от inconnect
 
Регистрация: 18.10.2011
Сообщений: 4

Получилось ли сделать это? Помогите, у меня такая же трабла! Экспериментировал на тройке, все заработало.
А в 4.0.2 не понимает verifyLayout и SetEditor
Ответить с цитированием
  #6 (permalink)  
Старый 01.11.2011, 11:22
Аспирант
Отправить личное сообщение для Black_Prince Посмотреть профиль Найти все сообщения от Black_Prince
 
Регистрация: 11.07.2011
Сообщений: 64

Я так понял что при первом вызове едитора но уже "прикрепляется" к строке и дальнейшие изменения не вызывают рендеринг самого грида.

Получилось с помощью проперти грида. Пришлось переделывать свой код.
Там конечно есть свои баги .

Например у пропертигрида не изменяется ширина колонок, но ответ на этот баг в другой теме этого форума.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
onclick, this Как корректно получить ссылку на текущий элемент вызова. abstract Events/DOM/Window 2 25.07.2017 12:18
Скрипт работает корректно везде, кроме IE 6 McS Events/DOM/Window 1 10.04.2011 15:37
не корректно работает с разными версиями веб betonka Events/DOM/Window 12 08.04.2011 12:45
FF + .blur не выполняется корректно. dimiork Firefox/Mozilla 3 28.09.2010 14:24
Opera не корректно работает со скриптом Anat.nem Opera, Safari и др. 4 30.10.2009 13:39