0

私は 2 つの DropDownBoxes を持っています。ドロップ ボックスの値の 1 つは、最初に選択した値に依存しています。

2 番目の 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」を取得しようとした行で、「Undefined のプロパティ 'value' を読み取れません」というエラーが表示されます。

4

1 に答える 1

1

ここで達成しようとしていることについて、2 つの考慮事項があります。

  1. ここでのエラーは、定義時にtxtBidVendorコンポーネントにアクセスしようとしている (存在しない) ことです。構成オブジェクト (ここにあるこれら 2 つのコンボボックスのように) を送信すると、実際には作成されませんが、初期値を設定するだけです。後でインスタンス化するために親によって使用される構成。

  2. あなたがしようとしていると思うのは、txtBidVendorコンボボックスで選択が変更されたときに、ストアのクエリパラメーター値を変更することです。これを実現するには、最初のコンボボックスの選択イベントをリッスンしてから、2 番目のコンボボックスのストアを変更してリロードする必要があります。このようなもの:

{
    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 に答える