Extjs 4 组合框首次未加载(使用表单数据设置组合后)

发布于 2024-12-05 16:36:56 字数 1015 浏览 0 评论 0原文

我在 window->form->combo 中有组合框,我使用 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'
}

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

I am having combobox with in window->form->combo, iam binding data from grid to combo using form.loadRecord(record).

My issue is:

After binding the data, i am trigger the combo to change the combo data ,For the first time combo expand little and hide automatically after second click only combo items loads correctly.

{
    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'
}

point me where iam going wrong or any property need to be added for component.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城之時有危險 2024-12-12 16:36:57

尝试添加

queryMode: 'local' 

到您的组合框属性

Try to add

queryMode: 'local' 

to your combobox properties

乖乖公主 2024-12-12 16:36:57

这是因为您的配置对象中未定义 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'
}

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

It's because valueField is not defined in your config object(while displayField is set). When extjs tries to load your combo he needs both value and display fields to display your combo correctly but in render time,your valueField is not yet set and he`s waiting for the ajax request sent to server and response is sent back.

In your listener you are setting the combo value while its not rendered yet.So when you click on your combo for the second time,exactly after remote JSON is loaded then combo fields are set.

{
    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'
}

Update:
One issue i didn't notice was that you created the store using Ext.create and because of that,extjs would try to Get your JSON twice(just check it using firebug) while one request would be enough.Just use new instead of Ext.create.I tested your code in my local server and its working correctly.if you still have the same issue please provide a download link to your form js + html + Store so i could review ur code.You may download my test files built on your code and working from here.tested on FF 6 and opera 10 and IE9

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文