0

我的表单上的组合框有问题。问题是,当我加载表单数据(使用form.loadRecord)时,即使我知道模型有数据,有时组合框也是空的。

当我查看 Firebug 时,我可以看到组合框存储是在记录加载后加载的。我认为这就是原因 - 组合框存储稍后加载,然后加载记录。

这就是我设置组合框商店的方式:

    //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.

4

1 回答 1

5

组合框的默认配置将在创建后第一次展开时触发存储加载。

除非你给它一个queryMode: 'local'配置,否则任何组合框都会发生这种情况。换句话说,默认组合框配置几乎总是在创建组件完成加载它的存储。出于这个原因,我觉得很奇怪你的连击很难加载太晚,也许他们加载得太早了autoLoad: true

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

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

于 2012-08-28T15:45:10.527 回答