extjs中的动态DropDownMenu

时间:2013-10-15 06:55:18

标签: extjs drop-down-menu

我有一个2 DropDownBoxes,其中1个drop box值被放在第一个选定值上。

如何在第二个DropDownBox中创建动态存储。

这是代码:

{
                            xtype: 'combobox',
                            displayField: 'vendor_name',
                            typeAhead: true,
                            mode: 'local',
                            triggerAction: 'all',
                            emptyText:'Choose vendor...',
                            selectOnFocus:true,
                            fieldLabel: 'Vendor Name',
                            margin: 10,
                            id: 'txtBidVendor',
                            labelWidth: 100,
                            store:  Ext.create('Ext.data.Store', {
                                fields:[
                                    {name: 'vendor_name'}
                                ],
                                proxy: {
                                    type: 'ajax',
                                    timeout: 120000,
                                    url: 'GetVendors.jsp',
                                    reader: {
                                        type: 'json',
                                        root: 'data',
                                        successProperty: 'success'
                                    }
                                },
                                autoLoad: true
                            })
                        },
                        {
                            xtype: 'combobox',
                            displayField: 'rate_desc',
                            typeAhead: true,
                            mode: 'local',
                            triggerAction: 'all',
                            emptyText:'Choose Quality...',
                            selectOnFocus:true,
                            fieldLabel: 'Vendor Quality',
                            margin: 10,
                            id: 'txtBidVendorQuality',
                            labelWidth: 100,
                            store:  Ext.create('Ext.data.Store', {
                                fields:[
                                    {name: 'rate_desc'}
                                ],
                                proxy: {
                                    type: 'ajax',
                                    timeout: 120000,
                                    url: 'GetVendorQuality.jsp?' + Ext.urlEncode({'bid_vendor': Ext.getCmp('txtBidVendor').value}), 
                                    reader: {
                                        type: 'json',
                                        root: 'data',
                                        successProperty: 'success'
                                    }
                                },
                                autoLoad: true
                            })
                        },

我收到错误:“无法读取未定义的属性'值',在我尝试获取”Ext.getCmp('txtBidVendor')的行中。值“

1 个答案:

答案 0 :(得分:1)

关于你在这里想要完成的事情,我有两点需要考虑:

  1. 这里的错误是你在定义时试图访问 txtBidVendor 组件(它不存在),当你发送一个配置对象时(比如这两个组合框) )你实际上没有创建它们,只是设置了它的父级将用于以后实例化的初始配置。

  2. 我认为您要做的是在 txtBidVendor 组合框中选择更改时更改商店的查询参数值。要实现这一点,您必须侦听第一个组合框的选择事件,然后修改并重新加载第二个组合的商店。这样的事情:

  3. {
        xtype: 'combobox',
        displayField: 'vendor_name',>         
        emptyText: 'Choose vendor...',
        selectOnFocus: true,
        fieldLabel: 'Vendor Name',
        id: 'txtBidVendor',
        store: vendorStore,
        listeners: {
            select: function (combo, records, eOpts) {
                var record = records[0]; // just want the first selected item
    
                rateStore.getProxy().extraParams.bid_vendor = record.get('vendor_name');
                alert('Store will load now with bid_vendor =' + record.get('vendor_name'));
                rateStore.load();
            }
        }
    }
    

    为了便于阅读,最好从组件定义本身中取出商店定义。在这里,您可以找到working sample of it

    希望它有所帮助。