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 combobox不会自动选择displayField_Extjs_Combobox - Fatal编程技术网

Extjs combobox不会自动选择displayField

Extjs combobox不会自动选择displayField,extjs,combobox,Extjs,Combobox,更新- 我还在JSFIDLE中做了一个模拟 并带有一个窗体面板: 我有一只吼叫的牛。 当我使用以下代码设置表单值时: this.form.loadRecord(data); 除了组合外,整个表单都正常运行。 我得到的不是displayField,而是display中的valueField 如上图所示,组合框应该显示单词Walla displayField,而不是1 valueField 我就是这样使用它的: { "xtype": 'foreigncombo' , "name": 'Bra

更新- 我还在JSFIDLE中做了一个模拟 并带有一个窗体面板:

我有一只吼叫的牛。 当我使用以下代码设置表单值时:

this.form.loadRecord(data);
除了组合外,整个表单都正常运行。 我得到的不是displayField,而是display中的valueField

如上图所示,组合框应该显示单词Walla displayField,而不是1 valueField

我就是这样使用它的:

{
  "xtype": 'foreigncombo'
, "name": 'Brand.Id'
, "fieldLabel": 'Brand.Id'
}
表单显示和ComboAjax请求之间没有竞争,combo存储是自动加载的:true,这意味着我看到它已经加载了


谢谢

我以你的小提琴为例。在此小提琴的第87行Ext.ComponentQuery.query'combobox'..中放置断点,并将监视设置为Ext.ComponentQuery.query'combobox'[0].store.data。。你会注意到商店没有数据。这可能与我在评论中提到的有关

我知道一定有更好的方法可以做到这一点,但我通常使用的解决方法是在应用程序之前的某个时间加载存储,或者使用同步Ext.Ajax.request并在存储中一次加载每条记录

由于这是一个品牌组合,我认为您可以在应用加载和查找商店之前加载商店,而不是每次创建foreigncombo组件时都创建一个新的商店,因此第一个解决方案应该是可行的

至于第二个解决方法,它也应该可以工作,它需要更多的编码,但实际上非常简单。应该是这样的

Ext.Ajax.request({
    url:'your/url/',
    async:false,
    .....
    success:function(response){
        var records = Ext.JSON.decode(response.responseText);
        for(var m=0; m<records.length; m++){
            var record = Ext.create('YourBrandModel',{
                abbr:records[m].abbr,
                name:records[m].name
            });
            store.add(record);
        }
    }
})
您应该尽可能少地执行此操作,因为如果每次创建foreigncombo时都调用它,可能会降低用户体验,因此在创建一个foreigncombo之前检查此存储是否存在可能是一个好主意


请考虑到我还没有测试过这段代码,所以为了让它工作,您可能需要稍微调整一下。但是它应该会让你走上正轨。

我没有得到最后一条粗体的评论,但是你是否在加载视图之前设置了一个断点,并检查了存储是否加载了数据?我以前遇到过这个问题,主要是因为当窗口出现时,商店没有完成加载。。。但现在还没有说这是事实
Ext.Ajax.request({
    url:'your/url/',
    async:false,
    .....
    success:function(response){
        var records = Ext.JSON.decode(response.responseText);
        for(var m=0; m<records.length; m++){
            var record = Ext.create('YourBrandModel',{
                abbr:records[m].abbr,
                name:records[m].name
            });
            store.add(record);
        }
    }
})