ExtJS 4 - выпуск ComboBox - PullRequest
       7

ExtJS 4 - выпуск ComboBox

2 голосов
/ 08 сентября 2011

У меня проблема при использовании комбинированного окна extjs (независимо от браузера, протестировано в Chrome и FF с одинаковым результатом).

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

Вот модель, считыватель, хранилище данных и код поля со списком:

//Model
Ext.define('cbMonitorModel', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'iMonitorID', type: 'String'},
        {name: 'sMonitorName', type: 'String'}
    ]
});

//Reader
var cbMonitorReader = Ext.create('Ext.data.JsonReader',{
    type: 'json',
    model: 'cbMonitorModel'
});

//Store
var cbMonitorDataStore = Ext.create('Ext.data.Store',{
fields: ['iMonitorId','sMonitorName'],
autoLoad: true,
proxy: {
    type: 'ajax',
    url: '/inc/ajax/Monitors.php',
    actionMethods: 'POST',
    reader: cbMonitorReader,
    extraParams: {
        task: 'getMonitors',
        domain: sMonitorDomainName
    }
}
});

//ComboBox
Ext.create('Ext.form.ComboBox',{
    fieldLabel: 'Monitor',
    store: cbMonitorDataStore,
    queryMode: 'local',
    displayField: 'sMonitorName',
    valueField: 'iMonitorId',
    renderTo: Ext.get('monitorSelect'),
    width: 400,
    listeners: {
        select: function(combo, records, opts) {
            console.log('MonitorComboBox - Select');
            console.log(combo);
            console.log(records);
            console.log(opts);
            console.log(cbMonitorDataStore);
            console.log('--------------------------------------------------------------------');
        }
    }
});

Прокси возвращает следующую строку:

[{"iMonitorID":"85","sMonitorName":"6176 - xxx.xxx.xxx.xxx default monitor"},{"iMonitorID":"86","sMonitorName":"14177 - aaa.bbbbbbbbb.com default monitor"}]

Спасибо. Любая помощь будет оценена.


Редактировать: 2011-09-08 16:32 CST

Я до сих пор не понял эту проблему, но в то же время я обнаружил «грязную» работу вокруг ... событие «развернуть» очищает предыдущее значение, которое позволяет пользователю выбрать другое значение, но тогда проблема заключалась в том, что я не мог использовать "getValue ()" ... отсюда cb.lastSelection[0].raw.iMonitorID строка ...

Код ComboBox:

var MonitorCB = Ext.create('Ext.form.ComboBox', {
    fieldLabel: 'Monitor',
    store: cbMonitorDataStore,
    queryMode: 'local',
    displayField: 'sMonitorName',
    valueField: 'iMonitorName',
    width: 400,
    renderTo: 'monitorSelect',
    listeners: {
        select: function(cb, rec, opts){
            console.log(cb.lastSelection[0].raw.iMonitorID);
        },
        expand: function(){this.clearValue()}
    }
});

1 Ответ

3 голосов
/ 09 сентября 2011

У вас есть ошибка в вашем коде. В конфиге выпадающего списка valueField: 'iMonitorId' указывается с маленькой буквы d, тогда как в конфиге модели name: 'iMonitorID' указывается с большой буквы (и прокси возвращает 'iMonitorID' s).

Кстати. Вы используете как ридер с моделью, так и поля конфигурации магазина. Конфигурация полей правильной модели не используется, потому что в хранилище уже указаны неправильные поля конфигурации.

Таким образом, решение будет:

1. избавиться от fields: ['iMonitorId','sMonitorName'], в настройках магазина.
2. изменить valueField на 'iMonitorID' в конфигурации combobox '.

...