组合框值在键入时消失

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 或其他东西时相同的速度键入它,那么您会看到自动完成随着

消失