Значения 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
.
Также проверьте на своей сетевой вкладке свою консоль, что отправляется на сервер. Если комбо отправляет прописные буквы, но сервер возвращается в нижнем регистре, проблема связана с сервером.