ExtJS 4 ComboBox自动完成

时间:2011-09-08 09:31:01

标签: extjs autocomplete combobox extjs4

我有一个用于自动完成的extjs组合框具有以下配置:

xtype:'combo',
displayField: 'name',
valueField:'id',
store: storeVar,
queryMode: 'remote',
minChars:2,
hideTrigger:true,
forceSelection:true,
typeAhead:true

我面临两个问题:

一个。 如果用户从服务器返回的列表中选择一个值,但后来想要删除该值并保持组合框为空,那么旧的值也会在模糊时重新出现,不允许组合框保持为空。在这种情况下如何在这个组合框中允许空值?我理解这可能是由于forceSelection:true,但是我需要保持它为真,否则用户可以输入任何随机值。

当服务器返回空列表时,我想显示一条消息 - 找不到值。我尝试将此值放在displayField实体中,即{id:'',name:'No Value Found'}。但是在这种情况下,用户可以选择此值并将其发送到服务器,这不是预期的。因此,如何显示空列表的消息?

有人可以点亮这个吗?

2 个答案:

答案 0 :(得分:3)

对于上面问题中与forceSelection相关的问题,以下是创建的hack可以达到预期目的:

Ext.override(Ext.form.field.ComboBox,{          
    assertValue: function() {
        var me = this,
            value = me.getRawValue(),
            rec;
        if (me.multiSelect) {
            // For multiselect, check that the current displayed value matches the current
            // selection, if it does not then revert to the most recent selection.
            if (value !== me.getDisplayValue()) {
                me.setValue(me.lastSelection);
            }
        } else {
            // For single-select, match the displayed value to a record and select it,
            // if it does not match a record then revert to the most recent selection.
            rec = me.findRecordByDisplay(value);
            if (rec) {
                me.select(rec);
            } else {
                if(!value){
                    me.setValue('');
                }else{
                    me.setValue(me.lastSelection);
                }
            }
        }
        me.collapse();
    }
});

在包含extjs的库文件之后,需要包含它。

对于在No Values Found中显示的另一个消息问题 - emptyText - 按照Varun的建议正常工作。

希望这有助于寻找类似的东西。

答案 1 :(得分:2)

我为Ext JS 3.3.1做了这个。我不知道他们是否适用于Ext JS 4,但我猜他们应该这样做。

对于第一个问题,请设置autoSelect : false。默认情况下,autoSelect设置为true。这仅在设置allowBlank : true时有效。来自文档

  

如果选择数据存储收集的第一个结果,则为true(默认值   为了真实)。假值需要手动选择   下拉列表设置组件值,除非值为   (typeAheadDelay)是真的。

对于第二个问题,请使用listEmptyText。来自文档

  

如果未找到任何项目,则在数据视图中显示空白文本。   (默认为'')

干杯。