如果商店大小为0,如何发送AJAX请求

时间:2012-12-19 17:17:32

标签: extjs

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

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

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

  }
}

1 个答案:

答案 0 :(得分: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

如果这个挂起组合给我反馈,因为还有另一个但更复杂的方式。