Extjs小部件标记字段可以';t从远程存储设置列表中的选定值

Extjs小部件标记字段可以';t从远程存储设置列表中的选定值,extjs,widget,store,tagfield,Extjs,Widget,Store,Tagfield,我在widgetcolumn中的标记字段有问题。 我将远程存储用于标记字段,并将“autolodonvalue”用于在列中显示加载的值。这是正确的。但我对值列表有一个问题。 如果列具有值,则该列不会在列表中高亮显示为选中。但在html中,加载的值定义为所选值。 如果选择不同的值,两个值将同时高亮显示 如何使其在展开列表时突出显示列中加载的值?有没有办法更新下拉列表 这是我的小提琴: UPD:queryMode:“local”对我不起作用,因为在我的应用程序中,我加载了带有额外参数的存储,并且

我在widgetcolumn中的标记字段有问题。 我将远程存储用于标记字段,并将“autolodonvalue”用于在列中显示加载的值。这是正确的。但我对值列表有一个问题。 如果列具有值,则该列不会在列表中高亮显示为选中。但在html中,加载的值定义为所选值。

如果选择不同的值,两个值将同时高亮显示

如何使其在展开列表时突出显示列中加载的值?有没有办法更新下拉列表

这是我的小提琴:

UPD:queryMode:“local”对我不起作用,因为在我的应用程序中,我加载了带有额外参数的存储,并且我总是为存储获取新值


有什么想法吗?

发生这种情况是因为您的标记字段存储在展开时正在重新加载,并且丢失了选定的值。您可以使用queryModel:“local”来防止重新加载存储

...
widget: {
    xtype: 'tagfield',
    store: this.tagStore,
    valueField: 'tag',
    displayField: 'field',
    autoLoadOnValue: true,
    //filterPickList: false,
    queryMode : 'local', // use this to avoid store reload on
    listeners: {
        select: function (cmp, record) {
            const dataIndex = cmp.getWidgetColumn().dataIndex;
            const widgetRecord = cmp.getWidgetRecord()
            let valuesArr = [];
            Ext.each(record, function (item) {
                valuesArr.push(item.data.tag)
            })
            widgetRecord.set(dataIndex, valuesArr);
            console.log(record)
        }
    }
}
...
或者,您可以使用以下替代(或者您可以使用适当的逻辑扩展标记字段)来存储选定的值,并在存储重新加载后重新选择它:

Ext.define('overrides.form.field.Tag', {
    override: 'Ext.form.field.Tag',
    
   initComponent: function() {
       this.getStore().on('beforeload', this.beforeStoreLoad, this);
       this.getStore().on('load', this.afterStoreLoad, this);
       this.callParent();
   },
   
   beforeStoreLoad: function(store) {
       this.beforeStoreLoadFieldValue = this.getValue();
   },
   
   afterStoreLoad: function(store) {
       this.setValue(this.beforeStoreLoadFieldValue);
   }
});

谢谢你,亚瑟!超驰控制帮助了我!