键入时,组合框值正在消失

时间:2015-08-18 14:57:20

标签: javascript extjs combobox extjs5

使用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 的记录。

我需要提供哪些必要的配置才能解决此问题?

3 个答案:

答案 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扩展程序)。

同时检查控制台的网络选项卡中发送给服务器的内容。如果组合发送大写,但服务器返回小写,则问题是服务器端。