Extjs 4组合框第一次没有加载(在使用表单数据设置组合后)

vin*_*eth 7 extjs extjs4

我在window-> form-> combo中使用了combobox,iam使用form.loadRecord(record)将数据从网格绑定到组合.

我的问题是:

绑定数据后,我触发组合更改组合数据,第一次组合扩展很少并在第二次单击后自动隐藏只有组合项正确加载.

{
    xtype: 'combobox',
    editable: false,
    id: 'USERTYPECmbo',
    queryMode: 'remote',
    displayField: 'USERTYPE',
    store: Ext.create('Ext.data.Store', {
        autoLoad: true,
        fields: ['USERTYPE'],
        proxy: {
            type: 'ajax',
            extraParams: {
                typeName: 'USERTYPE'
            },
            url: 'USERTYPE.htm',
            reader: {
                type: 'json',
                root: 'res'
            }
        },
        listeners: {
            load: function (store, options) {
                var combo = Ext.getCmp('USERTYPECmbo');
                combo.setValue(combo.getValue()); //Set the remote combo after the store loads.
            }
        }
    }),
    name: 'USERTYPE',
    fieldLabel: 'USER TYPE'
}
Run Code Online (Sandbox Code Playgroud)

指出我哪里出错或者需要为组件添加任何属性.

Ter*_*miT 6

尝试添加

queryMode: 'local' 
Run Code Online (Sandbox Code Playgroud)

你的组合框属性


Meh*_*nai 4

这是因为 valueField 未在您的配置对象中定义(当设置了 displayField 时)。当 extjs 尝试加载您的组合时,他需要值和显示字段来正确显示您的组合,但在渲染时,您的 valueField 尚未设置,他正在等待发送到服务器的 ajax 请求并发送回响应。

在您的侦听器中,您正在设置尚未呈现的组合值。因此,当您第二次单击组合时,恰好在加载远程 JSON 之后,将设置组合字段。

{
    xtype : 'combobox',
    editable : false,   
    id:'USERTYPECmbo',  
    queryMode: 'remote',
    displayField: 'USERTYPE', 
    valueField: 'USERTYPE',//set whatever field you like in your json                        
    store :new Ext.data.Store({
        autoLoad: true,
        fields: [ 'USERTYPE' ],
        proxy: {
            type: 'ajax',
            extraParams: {typeName : 'USERTYPE'},
            url : 'USERTYPE.htm',
            reader: {
                type: 'json',
                root : 'res'
            }
        }                       
    }),
    name : 'USERTYPE',
    fieldLabel: 'USER TYPE'
}
Run Code Online (Sandbox Code Playgroud)

更新: 我没有注意到的一个问题是您使用 Ext.create 创建了商店,因此,extjs 会尝试获取您的 JSON 两次(只需使用 firebug 检查它),而一个请求就足够了。只需使用 new 即可Ext.create 的。我在本地服务器中测试了您的代码并且其工作正常。如果您仍然遇到相同的问题,请提供指向您的表单 js + html + Store 的下载链接,以便我可以查看您的代码。您可以下载我的测试基于您的代码构建的文件并从此处开始工作。在 FF 6、opera 10 和 IE9 上进行了测试