组合框值在键入时消失
Combobox values are disappearing on typing
使用extjs 5.1.3版本。我有一个 typeAhead 组合框,格式如下:
组合框商店:
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)。
我需要提供哪些必要的配置来解决这个问题?
我有这样的 Extjs 组合:
{
xtype :'combo',
emptyText :'Pilih Client ...',
id :'f_client',
store : 'store_client',
displayField:'longname',
typeAhead : true,
valueField :'nickname',
width : 350
}
我尝试搜索小写或大写的数据都可以,所以我认为您必须在服务器端再次检查。因为像 oracle 这样的查询是区分大小写的。
column1 like '%a%'
和
`column1 like '%A%'`
不一样。
Ext.form.field.ComboBox
有一个 属性 caseSensitive 默认情况下是 false
。这意味着问题可以由您控制,但前提是此 属性 设置为 true
。如果此 属性 是 false
.
,您可以在您的控制台中检查(或使用 Chrome 的 Sencha 扩展)
同时在控制台的网络选项卡中检查发送到服务器的内容。如果组合发送大写,但服务器 returns 小写,则问题出在服务器端。
这似乎是 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;
}
});
fiddle fiddle here 可以按照您想要的方式工作,除了点亮的选项来自商店。我注意到的是,我必须将组合框直接绑定到商店才能在键入 A1 后不隐藏地工作。
对于查看此问题上列出的其他 fiddle 的其他人来说,如果您非常缓慢地键入 A1,您将看不到这种行为。如果您以与通常写 post 或其他东西时相同的速度键入它,那么您会看到自动完成随着
消失
使用extjs 5.1.3版本。我有一个 typeAhead 组合框,格式如下:
组合框商店:
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)。
我需要提供哪些必要的配置来解决这个问题?
我有这样的 Extjs 组合:
{
xtype :'combo',
emptyText :'Pilih Client ...',
id :'f_client',
store : 'store_client',
displayField:'longname',
typeAhead : true,
valueField :'nickname',
width : 350
}
我尝试搜索小写或大写的数据都可以,所以我认为您必须在服务器端再次检查。因为像 oracle 这样的查询是区分大小写的。
column1 like '%a%'
和
`column1 like '%A%'`
不一样。
Ext.form.field.ComboBox
有一个 属性 caseSensitive 默认情况下是 false
。这意味着问题可以由您控制,但前提是此 属性 设置为 true
。如果此 属性 是 false
.
同时在控制台的网络选项卡中检查发送到服务器的内容。如果组合发送大写,但服务器 returns 小写,则问题出在服务器端。
这似乎是 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;
}
});
fiddle fiddle here 可以按照您想要的方式工作,除了点亮的选项来自商店。我注意到的是,我必须将组合框直接绑定到商店才能在键入 A1 后不隐藏地工作。
对于查看此问题上列出的其他 fiddle 的其他人来说,如果您非常缓慢地键入 A1,您将看不到这种行为。如果您以与通常写 post 或其他东西时相同的速度键入它,那么您会看到自动完成随着
消失