1

私はextjs 4.0.7を使用しています。グリッドの編集モードに 2 つのコンボ ボックスがあり、最初のコンボ ボックスで選択した値に基づいて 2 番目のコンボ ボックスを変更する必要があるという要件があります。

extjs の MVC アーキテクチャと、json 文字列を返す Java コードを使用して、コンボ ボックスにデータを入力しています。私の最初のコンボ ボックスのコードは次のとおりです。

ファイルを閲覧する:

items: [{
            id: 'country',
            header: 'Countries',
            field: {
                xtype: 'combo',
                store: [
                    ["USA","USA"],
                    ["India","India"],
                ],
                editable: false,
                allowBlank: false,
                listeners: {
                    select: function(combo, records, eOpts){
                        contactTypeGrid = combo.getValue();
                        myGrid.fireEvent('LoadStateOnSelect');
                    }
                }
            }
        },
        {
            id: 'states',
            header: 'Sates',
            dataIndex: 'states',
            field: {
                xtype: 'combo',
                store: 'StateStore',
                valueField: 'stateDesc',
                displayField: 'stateText',
            }
        },  ....
    ]

コントローラ:

LoadStateOnSelect: function(){
    contactTypeGrid = contactTypeGrid.toLowerCase();
    var stateStore = this.getStateStoreStore();
    stateStore.getProxy().url = "myURL.do";
    stateStore.getProxy().extraParams.act = contactTypeGrid;
    stateStore.load();
},

ただし、このコードを実行すると、2 番目のストアのデータがバックグラウンドで変更されますが、値を選択できないため、ロード マスクが前面に表示され続けます。

条件付きデータ ロードの問題を解決するにはどうすればよいですか? どんな助けでも大歓迎です。

4

3 に答える 3

0

ストアをリロードする前に、コンボボックスで選択した値をクリアしようとしましたか? clearValue()コンボでメソッドを呼び出してみてください。

于 2012-05-01T07:04:37.247 に答える
0

carStore - メイン コンボの
ストア

サーバーからデータを取得する場合の、より一般的で役立つ例を考えてみましょう。

var carModelStore = new Ext.data.Store({
    reader: new Ext.data.JsonReader({
        fields: ['id', 'car-model'],
        root: 'rows'
    }),
    storeId: 'car-model-store',
    proxy: new Ext.data.HttpProxy({
        url: 'carmodeldataprovider.json?car-name=lamborghini'
    }),
    autoLoad: true
});


{ xtype: 'combo', name: 'car-name', fieldLabel: 'Car', mode: 'local', store: carStore, triggerAction: 'all',
    listeners: {
        select: function(combo, records, eOpts){
            var carName = records.get('car-name');
            var carModelStore = Ext.StoreMgr.lookup("car-model-store");

            carModelStore.proxy.setUrl('carmodeldataprovider.json?car-name=' + carName, false);
            carModelStore.reload();
        }
    }

}
于 2015-01-05T21:07:41.780 に答える
0

これには一時的な修正があります。ただし、より安定して実行可能なソリューションをまだ探しています。

解決策: 依存ストアのデータを変更するたびに、新しいデータを正しくロードするコンボ ボックスを展開できます。

LoadStateOnSelect: function(){
    contactTypeGrid = contactTypeGrid.toLowerCase();
    var stateStore = this.getStateStoreStore();
    stateStore.getProxy().url = "myURL.do";
    stateStore.getProxy().extraParams.act = contactTypeGrid;
    statesCombo.expand(); //Here I am assuming that "statesCombo" has a 
                         //reference to the dependant combo box.
    stateStore.load(); 
},

これは他の人の時間を節約するかもしれませんが、誰かがより実行可能な解決策を見つけた場合は、私にも知らせてください.

于 2012-05-24T06:31:38.857 に答える