1

現在のストア サイズが 0 であるという条件を設定して、コンボ ボックスの AJAX 要求を送信する方法。

基本的に、カスケードされた2つのリモートコンボボックスがあり、両方が遅延ロードされます(この動作は変更できません)

2番目のコンボボックスが最初のコンボボックスの展開時のイベントに基づいてカスケードされていても、サーバーへのAJAX呼び出しを行うことがわかりました(最初の展開のみ)

querymode local および autoload オプションは、ストアの作成時にページの読み込み時にコンボ ボックスを読み込むため、機能しません。

以下にコード スニペットを示します。

  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

1

コードを拡張するだけで、次のように実行できます。

listeners: {
    beforeload: function(store, options) {
        if (store.getCount() > 0) {
            return false; // will abort the load operation.
        }
        var value = Ext.getCmp('fistcombo').value;
        Ext.apply(options.params, {
             valuefirst:value
        });
    }
}

これは、ExtJS 3.xとExtJS4.xですべて同じように機能するはずです。これは、これを指定しなかったためです。しかし、私はあなたが3.xを使用していると思います

これがハングした場合は、フィードバックを送ってください。さらに別の方法がありますが、もう少し複雑な方法があります。

于 2012-12-19T18:26:49.913 に答える