远程组合框首次提供AJAX调用,即使它是级联的

时间:2012-12-19 13:33:23

标签: extjs

我有一个奇怪的问题。

我有两个组合框,我想用其他的值级联其中一个。

所以在一个组合框的select事件中,我得到另一个组合框并加载该商店。

但我观察到的是以下情况。

  1. 用户首次选择第一个组合框值,因此第二个组合框加载了商店。
  2. 当用户第一次选择第二个组合框时,AJAX通话就不知道为什么?
  3. 如果用户选择了组合框,则再次加载,然后加载商店以获得第二个组合框
  4. 当用户再次选择第二个组合框时,不会进行AJAX调用(为什么第一次进行AJAX调用)
  5. 我无法在步骤2中理解为什么对第二个组合进行AJAX调用,因为它已在步骤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);
    
      }
    }
    

1 个答案:

答案 0 :(得分:0)

您应该在商店中不指定自动加载:

  

autoload:false

在组合框中,您应该将querymode设置为local:

  

queryMode:'local'

编辑:你可能想在第一个组合商店自动加载。