ExtJs组合框存储加载和形式

mik*_*mik 0 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);
Run Code Online (Sandbox Code Playgroud)

有没有一种解决这个问题的常用方法?

我现在能看到的唯一方法是store.load在每个组合框存储中使用回调,然后在加载所有存储后执行loadRecord,但这看起来很复杂.

有帮助吗?

更新: 何时form.loadRecord调用内部调用field.setValue().所以,重点是:在setValue调用之前必须填充组合框存储.如果未加载商店,您将看到valueField而不是displayField.

Aci*_*ier 5

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

除非你给它queryMode: 'local'配置,否则任何组合框都会发生这种情况.换句话说,默认的组合框配置几乎总是创建组件完成加载它的存储.出于这个原因,我觉得你的组合很难被装入太晚,这可能是因为装载得太早了autoLoad: true

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

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