使用extjs 5.1.3版本。我有一个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}'
}
在组合框中键入值时,有时显示下拉值,有时不显示输入。当我观察网络面板时,存储正在从服务器正确加载。
当从服务器正确加载存储时,没有显示下拉值的客户端问题是什么?
更新:我找到了问题的模式,即如果在下拉列表中找到具有类型值的记录的完全匹配,则只有下拉值消失。 (例如,如果我输入字母 A ,并且如果记录的值为 A ,则下拉值会消失。如果我输入 a ,则下拉列表不会消失,因为没有包含小写 a 的记录。
我需要提供哪些必要的配置才能解决此问题?
答案 0 :(得分:4)
似乎这是Ext 5.1中的一个错误
仅当组件绑定到模型时才会发生这种情况。
以下是Fiddle重现此问题。输入 A ,您会看到结果,当您输入 A1 (存储在商店中)时,结果将被隐藏。
在Ext 5论坛中记录bug
<强>更新强>
这是我提出的修复方法。
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's 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;
}
});
答案 1 :(得分:3)
我有Extjs Combo这样:
{
xtype :'combo',
emptyText :'Pilih Client ...',
id :'f_client',
store : 'store_client',
displayField:'longname',
typeAhead : true,
valueField :'nickname',
width : 350
}
我试着用小写字母搜索数据或A大写是好的,所以我认为你必须再次检查你的服务器端。导致像oracle这样的查询区分大小写。
column1 like '%a%'
和
`column1 like '%A%'`
是不同的。
答案 2 :(得分:3)
Ext.form.field.ComboBox
的属性caseSensitive默认为false
。这意味着问题可以在您的控制范围内,但前提是此属性设置为true
。如果此属性为false
,您可以登录您的控制台(或使用Chrome的Sencha扩展程序)。
同时检查控制台的网络选项卡中发送给服务器的内容。如果组合发送大写,但服务器返回小写,则问题是服务器端。