0

团队,

我有奇怪的问题。

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

因此,在一个组合框的选择事件中,我得到另一个组合框并加载该商店。

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

  1. 用户第一次选择第一个组合框值,因此为第二个组合框加载存储。
  2. 当用户第一次选择第二个组合框时,会进行 AJAX 调用,不知道为什么?
  3. 再一次,如果用户选择第一个组合框,则为第二个组合框加载存储
  4. 当用户再次选择第二个组合框时,不进行 AJAX 调用(为什么第一次进行 AJAX 调用)

在第 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);

  }
}
4

1 回答 1

0

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

自动加载:假

在组合框中,您应该将查询模式设置为本地:

查询模式:'本地'

编辑:您可能希望在第一个组合商店上自动加载。

于 2012-12-19T14:32:18.647 回答