#extjs #combobox
#extjs #combobox
Вопрос:
Я пытаюсь заполнить выпадающий список ExtJS 7.3.1 ключом / значением из массива.
Затем мне нужно отобразить оба (ключ и значение) в выпадающем списке и в выпадающем списке следующим образом:
var test_store = new Ext.data.SimpleStore({fields : ['value','text'],data : []});
var testArr = [
['test 1', '1'],
['test 2', '2'],
['test 3', '3'],
['test 4', '4'],
]
var combo = Ext.getCmp('test');
test_store = new Ext.data.SimpleStore({
fields: ['value', 'text'],
data: testArr,
});
Ext.create({
xtype: 'formpanel',
renderTo: document.body,
items: [{
xtype: 'combobox',
id: 'test',
name: 'test',
label: 'test',
store: test_store,
displayField: 'text',
valueField: 'value',
queryMode: 'local',
editable: false,
displayTpl: '{value} - {text}',
itemTpl: '<div data-qalign="b-t" data-qanchor="true" data-qtip="{text}">{value} - {text}amp;nbsp;</div>',
autocomplete: false,
}]
});
Но когда я расфокусирую combobox после выбора нового значения, он дважды отобразит displayTpl, я делаю что-то не так или мне нужно сообщить об ошибке?
скрипка: https://fiddle.sencha.com/#view/editoramp;fiddle/3c6i
Ответ №1:
Я бы действительно переопределил только displayTpl
or itemTpl
, если вы знаете, что делаете. В этом случае я бы сказал, создайте отдельное поле и выполните преобразование там. Вот так
var test_store = new Ext.data.SimpleStore({fields : ['value','text'],data : []});
var testArr = [
['test 1', '1'],
['test 2', '2'],
['test 3', '3'],
['test 4', '4'],
]
var combo = Ext.getCmp('test');
test_store = new Ext.data.SimpleStore({
fields: ['value', 'text', {
name: 'display',
type: 'string',
depends: ['value', 'text'],
convert: function(value, record) {
return `${record.get('value')} - ${record.get('text')}`
}
}],
data: testArr,
});
Ext.create({
xtype: 'formpanel',
renderTo: document.body,
items: [{
xtype: 'combobox',
id: 'test',
name: 'test',
label: 'test',
store: test_store,
displayField: 'display',
valueField: 'value',
queryMode: 'local',
autocomplete: false,
anyMatch: true,
forceSelection: true
}]
});
Комментарии:
1. Спасибо, что пока это работает для решения проблемы displayField. Но другая проблема в том, что я не могу установить для него редактируемый, потому что, когда я начну печатать, он вставит — likes this a — s — d вместо asd
2. @JustAwesome проверьте сейчас… Я добавил
anyMatch
иforceSelection