Значения Combobox исчезают при наборе текста

Использование версии extjs 5.1.3. У меня есть combobox typeAhead в форме, как показано ниже:

Хранилище Combobox:

Ext.define('MyApp.view.myobj.field.CustomObject', {
    extend:'Ext.form.field.ComboBox',
    xtype: 'cstmObject',
    requires: [
        'MyApp.model.myobj.CustomObject'
    ],
    fieldLabel: 'Custom Object Name',
    displayField: 'name',
    valueField: 'name',
    queryMode: 'remote',
    selectOnFocus: false,
    typeAhead: true,
    hideTrigger: true,
    minChars: 1,
    queryCaching : false,
    store:{
        model: 'MyApp.model.myobj.CustomObject'
    }
}

Ниже приведен фрагмент в форме:

{
    xtype: 'cstmObject',
    fieldLabel: 'Custom Object Name',
    allowBlank: false,
    maxLength: 5,
    enforceMaxLength: true,
    bind: '{customObject.row}'
}

При вводе значения в combobox иногда выпадающие значения отображаются и иногда не отображаются для ввода. Когда я наблюдаю сетевую панель, хранилище правильно загружается с сервера.

Каковы возможные проблемы на стороне клиента, чтобы не показывать значения выпадающего списка, когда хранилище правильно загружается с сервера?

Обновление: Я нашел шаблон для проблемы, т.е. если точное совпадение записи найдено в раскрывающемся списке с введенным значением, то исчезают только значения выпадающего списка. (например, если я набираю алфавит A, и если есть запись со значением A, тогда выпадающие значения исчезают. Если я наберу a, то выпадающий список будет не исчезают, поскольку нет записи с строчными буквами a).

Какие требуемые конфигурации мне нужно предоставить, чтобы исправить это?

Ответ 1

Похоже, что это ошибка в Ext 5.1

Это происходит только тогда, когда компонент привязан к модели.

Здесь Fiddle, чтобы воспроизвести эту проблему. Введите A, вы увидите результаты и когда вы наберете A1 (который присутствует в магазине), результаты будут скрыты.

Записан ошибка на форуме Ext 5

Обновление

Вот исправление, с которым я пришел.

Ext.define('MyApp.overrides.form.field.ComboBox', {
    override: 'Ext.form.field.ComboBox',

    /**
     * Fix for EXTJS-19274
     */
    setValue: function(value) {
        var me = this;

        // This is the value used to forceSelection in assertValue if an invalid value is left
        // in the field atcompleteEdit. Must be cleared so that the next usage of the field
        // is not affected.
        me.lastSelectedRecords = null;

        // Value needs matching and record(s) need selecting.
        if (value != null) {
            // Only go through text/record matching if there a change.
            if (value !== me.getRawValue()) {
                me.doSetValue(value);
            }
        }
        // Clearing is a special, simpler case.
        else {
            me.suspendEvent('select');
            me.valueCollection.beginUpdate();
            me.pickerSelectionModel.deselectAll();
            me.valueCollection.endUpdate();
            me.resumeEvent('select');
        }
        return me;
    }
});

Ответ 2

Скрипт скрипка здесь работает так, как вы хотите, за исключением того, что освещенные опции поступают из магазина. Что я заметил, так это то, что мне приходилось привязывать выпадающие списки непосредственно к магазину, чтобы он работал, не скрываясь после ввода A1.

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

Ответ 3

У меня есть Extjs Combo:

{
xtype       :'combo',
emptyText   :'Pilih Client ...',
id          :'f_client',
store       : 'store_client',
displayField:'longname',
typeAhead   : true,
valueField  :'nickname',
width       : 350
}

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

column1 like '%a%'

и

`column1 like '%A%'`

отличается.

Ответ 4

Ext.form.field.ComboBox имеет свойство caseSensitive, которое по умолчанию равно false. Это означает, что проблема может быть в вашем контроле, но только если для этого свойства установлено значение true. Вы можете проверить свою консоль (или с расширением Sencha для Chrome), если это свойство false.

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