1

如何通过当前存储大小为 0 的条件发送组合框的 AJAX 请求。

基本上我有两个级联的远程组合框,并且都是延迟加载的(无法更改此行为)

我发现即使第二个组合框是基于第一个组合框扩展时的事件级联的,它也会对服务器进行 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 回答