昨天终于是把联动写出来了~~  
但是今天早上忽然发现,这个联动为啥不刷新呢?二级combobox初始化显示data2的数据,选择一级combobox后数据变成data3了,但是从新选择的时候data3数据不变了……。
是那个reload()方法没执行么?
我看了看API 似乎reload()是store的方法,但是我写成combo.store.reload();也不对啊……
报的错变成this.proxy为空或不是对象 了。是我数据写的不对么?
求助啊求助……!下面是代码(写的有点儿乱,见谅):var data=[['aaa,'hubei'],['bbb,'jiangxi'],['ccc','anhui']];

var store = new Ext.data.SimpleStore({
             fields: ['name', 'value'],
             data : data
        });var data2=[['p1','hubei'],['p2','jiangxi'],['p3','anhui']];
var store2 = new Ext.data.SimpleStore({
              fields: ['name', 'value'],
              data : data2
         });{
  xtype:'combo',
                    store:store,
                    emptyText:'请选择...',
                    id:'checkState',
                    mode:'local',
                    triggerAction:'all',
                    displayField:'name',
                    valueField : 'value',
                     listeners:{
                 "select":function(){
                 var v1 = Ext.get("checkState").dom.value;
                            var data3=[['t1'+v1,'hubei'],['t2','jiangxi'],['t3','anhui']];
var store3 = new Ext.data.SimpleStore({
              fields: ['name', 'value'],
              data : data3
         });
         var combo = Ext.getCmp("checkState2");
         combo.store=store3;   
                            combo.reload();
                            
                         }
                     }
                    
},
{
  xtype:'combo',
                    store:store2,
                    emptyText:'请选择...',
                    id:'checkState2',
                    mode:'local',
                    triggerAction:'all',
                    displayField:'name',
                    valueField : 'value',
                    listeners:{
                 "select":function(){
                            alert(Ext.get("checkState2").dom.value);   //获取id为combo的值
                         }
                     }
                    
}

解决方案 »

  1.   

    1.在select 事件中, 你只是想改变checkState2的值, 因此可以调用combo.store.loadData()方法。
    2.你的每个data的item 的value 全部是hubei, jiangxi, anhui, 如果你选择了checkState1的值后你如何确定checkState2的item到底有没有变化, 可以把item改成别的。
      

  2.   

    额……
        data里的value怎么读取啊?为啥alert(Ext.get("checkState2").dom.value);弹出的是name的值呢?我就晕了。
        而且这个combo.store.loadData()方法是不是需要传参啊?调用它就会报“this.proxy为空或不是对象”的错啊……又搞不清了……是fields的问题么?
      

  3.   

    1参数就是定义的data
    2Ext.get("checkState2").dom.value改成Ext.get("checkState2").value试一下。
      

  4.   

    问题已解决。
    发现一开始理解有偏差,不需要新创建一个store只有将原来的store从新load就行了。
    还有关于那个value的问题。Extjs的combobox有一个属性是hiddenName,这里保存的是选项的值value,而2Ext.get("checkState2").dom.value所保存的是显示的文本内容。所以获取方式是:Ext.get("hiddenValue").dom.value。(hiddenName:'hiddenValue')。
      

  5.   

    extjs4 的话,最方便还是用filter.在第一个comobox的select 或change事件中添加:
    init: function () {
            this.control({               'combobox[name="depart"]': {
                    change: this.RefreshGroupName
                }
                
            });
        },
    RefreshGroupName: function (comobox1, records, opts) {
            var combGroupName = comobox1.up('empPanel').getChildByElement('groupname');
            combGroupName.clearValue();        
            var byDepart = comobox.getValue();
            var storeGroupName = Ext.getStore('sGroupName');       
            storeGroupName.clearFilter();
            storeGroupName.filter('DepartmentName', byDepart);
        },这里是用的MVC方式,可以根据需要更改主,关键的是最后两句。