Extjs 4 Combo box не загружается в первый раз (после того, как combo установлен с данными формы) - PullRequest
7 голосов
/ 20 сентября 2011

У меня есть поле со списком в окне-> форма-> комбо, связывание данных iam из сетки в комбо, используя form.loadRecord (запись).

Моя проблема:

После привязки данных, я запускаю комбо для изменения данных комбо, В первый раз комбо немного расширяется и скрывается автоматически после того, как после второго щелчка правильно загружаются только комбо-элементы.

{
    xtype: 'combobox',
    editable: false,
    id: 'USERTYPECmbo',
    queryMode: 'remote',
    displayField: 'USERTYPE',
    store: Ext.create('Ext.data.Store', {
        autoLoad: true,
        fields: ['USERTYPE'],
        proxy: {
            type: 'ajax',
            extraParams: {
                typeName: 'USERTYPE'
            },
            url: 'USERTYPE.htm',
            reader: {
                type: 'json',
                root: 'res'
            }
        },
        listeners: {
            load: function (store, options) {
                var combo = Ext.getCmp('USERTYPECmbo');
                combo.setValue(combo.getValue()); //Set the remote combo after the store loads.
            }
        }
    }),
    name: 'USERTYPE',
    fieldLabel: 'USER TYPE'
}

укажите мне, где происходит ошибка или нужно добавить какое-либо свойство для компонента.

Ответы [ 2 ]

6 голосов
/ 27 января 2012

Попробуйте добавить

queryMode: 'local' 

к вашим свойствам списка

4 голосов
/ 21 сентября 2011

Это потому, что значение valueField не определено в вашем объекте конфигурации (пока установлено displayField). Когда extjs пытается загрузить ваше комбо, ему нужны поля значений и отображения, чтобы правильно отобразить ваше комбо, но во время рендеринга ваше значение valueField еще не установлено, и он ожидает ajax-запроса, отправленного на сервер, и ответа отправляется обратно.

В вашем слушателе вы устанавливаете комбо-значение, пока оно еще не визуализируется. Так что, когда вы нажимаете комбо во второй раз, точно после загрузки удаленного JSON, тогда устанавливаются комбо-поля.

{
    xtype : 'combobox',
    editable : false,   
    id:'USERTYPECmbo',  
    queryMode: 'remote',
    displayField: 'USERTYPE', 
    valueField: 'USERTYPE',//set whatever field you like in your json                        
    store :new Ext.data.Store({
        autoLoad: true,
        fields: [ 'USERTYPE' ],
        proxy: {
            type: 'ajax',
            extraParams: {typeName : 'USERTYPE'},
            url : 'USERTYPE.htm',
            reader: {
                type: 'json',
                root : 'res'
            }
        }                       
    }),
    name : 'USERTYPE',
    fieldLabel: 'USER TYPE'
}

Обновление: Одной из проблем, которую я не заметил, было то, что вы создали магазин с использованием Ext.create, и поэтому extjs будет пытаться получить ваш JSON дважды (просто проверьте его с помощью firebug), в то время как одного запроса будет достаточно. Просто используйте новый вместо Ext Создайте. Я протестировал ваш код на моем локальном сервере и он работает правильно. Если у вас все еще остается та же проблема, пожалуйста, предоставьте ссылку на скачивание вашей формы js + html + Store, чтобы я мог просмотреть ваш код. Вы можете скачать мои тестовые файлы, созданные на ваш код и работает с здесь . проверено на FF 6 и Opera 10 и IE9

...