0

チーム、

奇妙な問題があります。

私は2つのコンボボックスを持っていますが、他の値を使用してそのうちの1つをカスケードしたいと思います。

したがって、あるコンボボックスの選択イベントで、別のコンボボックスを取得し、そのストアをロードしています。

しかし、私が観察したのは以下の場合です。

  1. ユーザーが最初のコンボボックスの値を初めて選択するため、2番目のコンボボックスのストアが読み込まれます。
  2. ユーザーが初めて2番目のコンボボックスを選択すると、AJAX呼び出しが行われます。理由がわかりませんか?
  3. もう一度、ユーザーがコンボボックス1を選択すると、ストアはコンボボックス2番目にロードされます
  4. ユーザーが2番目のコンボボックスをもう一度選択した場合、AJAX呼び出しは行われません(AJAX呼び出しが初めて行われる理由)

ステップ2で、AJAX呼び出しが2番目のコンボに対して行われる理由を理解できません。これは、ステップ1ですでにロードされているためです。

コードの詳細

    xtype: 'combo',id='firstcombo', name: 'DEFAULT_VALUE' ,minChars:2, value: decodeHtmlContent('') ,width:200 ,listWidth:500, resizable: true,
 valueField : 'id', displayField: 'id', pageSize: 15,forceSelection:true, enableKeyEvents: true,
 store: new Ext.data.Store({reader: new Ext.data.CFQueryReader({id: 'NAME', 
            fields:[{name:'id', mapping:'id'}]}), 
            fields: [{name:'id', mapping:'id'}], 
            url:'server/ajax/Params'
            }

 }),
 listeners : {
         select:function(combo, record, index) {
            this.setRawValue(decodeHtmlContent(record.get('id')));
            cascadeFields();
        }



 xtype: 'combo',id='secondcombo', name: 'DEFAULT_VALUE' ,minChars:2, value: decodeHtmlContent('') ,width:200 ,listWidth:500, resizable: true,
 valueField : 'id', displayField: 'id', pageSize: 15,forceSelection:true, enableKeyEvents: true,
 store: new Ext.data.Store({reader: new Ext.data.CFQueryReader({id: 'NAME', 
            fields:[{name:'id', mapping:'id'}]}), 
            fields: [{name:'id', mapping:'id'}], 
            url:'server/ajax/Params',
            baseParam:{valuefirst:''}
            },
            listeners: {

                beforeload: function(store, options) {
                    var value = Ext.getCmp('fistcombo').value;
                    Ext.apply(options.params, {

                                valuefirst:value
                            });


                }, 

 }),
 listeners : {
         select:function(combo, record, index) {
            this.setRawValue(decodeHtmlContent(record.get('id')));
        }


function cascadeFields()
{

  var combo = Ext.getCmp('secondcombo');

  if(combo.store)
  {

  var store = combo.store;


  combo.setDisabled(true);
  combo.clearValue('');
  combo.store.removeAll();
  combo.store.load();        
  combo.setDisabled(false);

  }
}
4

1 に答える 1

0

ストアに自動ロードを指定しないでください。

自動ロード:false

また、コンボボックスで、querymodeをlocalに設定する必要があります。

queryMode:'ローカル'

編集:ただし、最初のコンボストアで自動ロードが必要な場合があります。

于 2012-12-19T14:32:18.647 に答える