ExtJs组合框存储加载和形式

时间:2012-08-28 08:47:14

标签: extjs extjs4

我的表格上有组合框问题。 问题是当我加载表单数据时(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

1 个答案:

答案 0 :(得分:5)

组合框的默认配置会在创建后第一次展开时触发商店加载。

任何组合框都会发生这种情况,除非你给它一个queryMode: 'local'配置。换句话说,默认的组合框配置几乎总是在创建组件后完成加载它的商店。出于这个原因,我觉得你的组合很难被装入太晚,或许它们在autoLoad: true

过早加载

但是,我没有遇到同样的问题,因为我通常使用queryMode: 'local'设置我的组合框并在应用初始化阶段为它们预加载存储。我这样做是因为我的组合商店通常都是参考商店,可以在我的应用程序中的许多不同视图中使用。我在创建组合组件时没有重新创建商店,我只是使用Ext.getStore('ComboStoreId')获取对已存在且已加载的参考商店的引用。您可以尝试像这样设置您的应用。

如果您不想这样做,您还可以尝试从您的组合商店中删除autoLoad: true配置,然后在调用{{1}后调用yourComboStore.load() }}