Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJs组合框存储加载和表单_Extjs_Extjs4 - Fatal编程技术网

ExtJs组合框存储加载和表单

ExtJs组合框存储加载和表单,extjs,extjs4,Extjs,Extjs4,我的表单上的组合框有问题。 问题是,当我加载表单数据时(使用form.loadRecord)有时组合框是空的,即使我知道模型有数据 当我查看Firebug时,我可以看到combobox存储是在记录加载之后加载的。我认为这就是原因——combobox存储稍后加载,然后再加载记录 以下是我设置组合框存储的方式: //All stores have autoload:true configuration. var possessionGroundsStore = Ext.create(

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

当我查看Firebug时,我可以看到combobox存储是在记录加载之后加载的。我认为这就是原因——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);
有解决这个问题的通用方法吗

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

有什么帮助吗

更新: 调用
form.loadRecord
时,它在内部调用
field.setValue()
。 因此,要点是:在调用
setValue
之前,必须填充组合框存储。 如果未加载存储,您将看到
valueField
而不是
displayField

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

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

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

如果您不想这样做,您也可以尝试从组合存储中删除
自动加载:true
配置,然后在调用
loadRecord
后调用
yourComboStore.load()
组合框的默认配置将在创建后第一次展开时触发存储加载

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

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


如果您不想这样做,您也可以尝试从组合存储中删除
自动加载:true
配置,然后调用
yourComboStore.load()
调用
loadRecord

尝试使用triggerAction:“全部”用于组合框属性使用triggerAction:“全部”用于组合框属性使用triggerAction,我尝试了您的方法(第二个)但是运气不好。查看我的更新。谢谢,我尝试了你的方法(第二个)但是运气不好。查看我的更新。