我的表格上有组合框问题。
问题是当我加载表单数据时(form.loadRecord
)有时组合框是空的,即使我知道模型有数据。
当我查看Firebug时,我可以看到在加载记录后加载了组合框存储。我认为这就是原因 - 组合框存储稍后加载然后加载记录。
这就是我设置combobox商店的方式:
//All stores have autoload:true configuration.
var possessionGroundsStore = Ext.create('path.to.store');
var vehicleTypesStore = Ext.create('path.to.store');
var usePurposesStore = Ext.create('path.to.store');
this.editView = Ext.create('path.to.view');
this.editView.getPossessionGroundsField().store = possessionGroundsStore;
this.editView.getVehicleTypeIdComboBox().store = vehicleTypesStore;
this.editView.getUsePurposeField().store = usePurposesStore;
//later
this.editView.loadRecord(record);
有没有一种解决这个问题的常用方法?
我现在唯一能看到的方法是在每个组合框存储中使用store.load
个回调
然后在加载所有商店后执行loadRecord,但这似乎很复杂。
任何帮助?
更新
调用form.loadRecord
时,它会在内部调用field.setValue()
。
因此,重点是:在调用setValue
之前必须填充组合框存储。
如果未加载商店,您会看到valueField
而不是displayField
。
答案 0 :(得分:5)
组合框的默认配置会在创建后第一次展开时触发商店加载。
任何组合框都会发生这种情况,除非你给它一个queryMode: 'local'
配置。换句话说,默认的组合框配置几乎总是在创建组件后完成加载它的商店。出于这个原因,我觉得你的组合很难被装入太晚,或许它们在autoLoad: true
但是,我没有遇到同样的问题,因为我通常使用queryMode: 'local'
设置我的组合框并在应用初始化阶段为它们预加载存储。我这样做是因为我的组合商店通常都是参考商店,可以在我的应用程序中的许多不同视图中使用。我在创建组合组件时没有重新创建商店,我只是使用Ext.getStore('ComboStoreId')
获取对已存在且已加载的参考商店的引用。您可以尝试像这样设置您的应用。
如果您不想这样做,您还可以尝试从您的组合商店中删除autoLoad: true
配置,然后在调用{{1}后调用yourComboStore.load()
}}