商店重新加载后的Ext组合框选择没有'工作不正常

Ext combobox select after store reload doesn't work properly

本文关键字:选择 不正常 工作 组合 Ext 新加载 加载      更新时间:2023-09-26

这是我的组合框配置

{
    xtype : 'combo',
    fieldLabel : 'Select Field',
    displayField : 'field_name',
    valueField : 'field_id',
    id : 'fields_combo_id',
    store: new Ext.data.JsonStore({
         proxy : new Ext.data.HttpProxy({url:eyefind.config.DATA_RETRIEVAL, method:'GET'}),
         baseParams: { subject: 'fields' },
         root: 'data',
         id: 'field_id', 
         fields: ['field_name'],
         autoload: true
     }),
    labelStyle : 'font-weight:bold; width:100px',
    triggerAction : 'all',
    clearFilterOnReset : false,
    mode : 'local'
 }

我以这种方式在外部函数中加载存储:

        .....
        var comboFields = Ext.getCmp('fields_combo_id');
        comboFields.store.load(); 
        comboFields.setValue(selectedFieldId);
        .....

到目前为止,selectedFieldId已经设置好了,但在可见部分,我看到的是一个值,而不是displayText,商店看起来很好,我在那里正确地设置了value:displayValue对。

我是错过了什么,还是必须为此部分使用一些其他功能?

我的Ext版本是3.2.0。

您设置了valuefield : 'field_id',但商店的fields、中没有field_id

{
    xtype : 'combo',
    fieldLabel : 'Select Field',
    displayField : 'field_name',
    valueField : 'field_id', //This 'field_id' must be in store fields too.
    id : 'fields_combo_id',
    store: new Ext.data.JsonStore({
        proxy : new Ext.data.HttpProxy({url:eyefind.config.DATA_RETRIEVAL, method:'GET'}),
        baseParams: { subject: 'fields' },
        root: 'data',
        id: 'field_id', //This id is just for the store, not the record data.
        fields: ['field_id','field_name'], // here, i add `field_id`
        autoload: true // This should be autoLoad, remember JavaScript is case sensitive.
    }),
    labelStyle : 'font-weight:bold; width:100px',
    triggerAction : 'all',
    clearFilterOnReset : false,
    mode : 'local'
}

此外,如果在外部函数中再次加载autoLoad : true,为什么要设置它?

编辑

当我运行comboFields.setValue(id);时,我的id被分配给其中一个字段id,它就工作了,我在组合框上看到了displayfield(不需要先下拉)。但是,如果在你的情况下,你的组合项目被突出显示,我想这是因为版本的原因。不幸地我在Ext 3.3.0中进行了测试。

尝试以下代码。

var selectedFieldValue = Ext.getCmp('fields_combo_id').getRawValue();
var selectedFieldId    = Ext.getCmp('fields_combo_id').getValue();
comboFields.setValue(selectedFieldId,selectedFieldValue);