0

我有 2 个 DropDownBoxes,其中 1 个下拉框值依赖于第一个的选定值。

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

这是代码:

{
                            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').value”的行中

4

1 回答 1

1

关于您要在这里完成的工作,我有两个考虑:

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

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

{
    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();
        }
    }
}

为了可读性,最好将存储定义也从组件定义本身中取出。在这里您可以找到它的工作示例

希望能帮助到你。

于 2013-10-15T08:07:27.363 回答