You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExtJS 6 Combobox设置queryMode:local后数据不显示求助

问题分析与解决方案

你遇到的问题核心在于Combobox关联的Store实例和你在控制器中加载数据的Store实例不是同一个,导致queryMode: 'local'时Combobox的Store是空的,自然无法展示数据。

具体原因

在你的视图代码中,Combobox的store配置是{ type: 'sitedomain' },这会创建一个全新的SiteDomain Store实例;而你在控制器中调用me.getSiteDomainStore()加载数据的是另一个Store实例(由控制器stores: [ 'SiteDomain' ]注册的全局实例)。两个实例相互独立,所以控制器加载的数据并不会同步到Combobox的Store中。

当queryMode: 'remote'时,Combobox会自己触发远程请求获取数据,所以能正常显示;但local模式下,它只会读取自身关联的Store本地数据,而这个新实例并没有被加载数据,因此无法展示。

解决方案

有两种简单的修复方式,任选其一即可:

方案1:让Combobox直接引用已注册的Store实例

修改视图中Combobox的store配置,直接使用Store的注册名称(对应你定义的Stm.store.SiteDomain),而不是创建新实例:

xtype: 'cps-combobox',
fieldLabel: 'Domain',
itemId: 'cmbSiteDomain',
queryMode: 'local',
store: 'SiteDomain', // 替换原有的 { type: 'sitedomain' }
width: 350,
displayField: 'siteDomain',
valueField: 'siteId',

这样Combobox会直接关联控制器中注册的那个Store实例,当你在控制器中调用store.load()加载数据后,Combobox就能在local模式下读取到这些数据。

方案2:在控制器中手动为Combobox绑定已加载的Store

如果你需要保持视图中Store的配置方式,可以在控制器的setupStmList方法里,将加载好数据的Store实例赋值给Combobox:

setupStmList: function() {
    console.log(Ext.getDisplayName(arguments.callee));
    var me = this;
    var store = me.getSiteDomainStore();
    var record = Cps.Util.baseRecord();
    store.load({
        params: param,
        callback: function(records, operation, success) {
            // ... 原有回调代码保持不变 ...
            
            // 新增:将加载好的Store赋值给Combobox
            me.getList().down('#cmbSiteDomain').setStore(store);
        }
    });
    me.firstSorters = this.getHpUpdateStore().getSorters();
},

这样Combobox就会使用已经加载了数据的Store实例,local模式下就能正常展示数据了。

额外验证点

为了确保万无一失,你可以额外确认:

  • displayField: 'siteDomain'和valueField: 'siteId'与Stm.model.SiteInfo中定义的字段名完全一致(既然remote模式正常,这点应该没问题);
  • Store加载完成后,确实有数据(可以在回调中打印records.length确认)。

内容的提问来源于stack exchange,提问作者maryyyyyyy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:19:04