因代码有跟服务器交互取数据,所以,不好整理,我先说下我想实现的功能,后面看下各位能否理解,不好理解我再整理下代理贴上来吧。
我就是想用combobox实现一个简单的二级联动的下拉框功能,比如,就省份与城市,当我第一个下拉框选择一个省份时,
第二个下拉框更新其对应的城市,这个应该好理解。
我是在select事件中触发,当我选择省份时,取到其对应的省份编号,再通过省份编号用DirectStore到后台取store的值(取值完全没问题),再把store的值赋值城市对应的下拉框的store,再load下理论上就更新了城市的选择框。
思路应该没问题,其实我刚进入这个操作界面时,这个功能是正常的,但奇怪的是,只限于第一次选择,我第二次再选择省份时,这时,换了个省份,却发现,城市的下拉框不再更新了!即还是之前的那个省份对应的城市!真是太离奇了啊,代码也实在看不出问题。
后来,我又发现了一个规律,其实,如果第一次进入时操作界面时,我先去点那个城市的下拉框,随便点一下,就会造成,选择省份时,无效了!即只能城市的下拉框你选择过后,后面,选择省份就永远不能更新城市下拉框的值了。
我不知道各位高人能否看得懂我说的意思,这到底是什么原因呢?百思不得其解,有人遇到类似奇怪的问题吗?
说得有点多了,我看下,代码能不能大概整理下,贴上来吧。

解决方案 »

  1.   

    http://lamper571.iteye.com/blog/213028用这上面的例子试试看。
      

  2.   

    首先,我说下我跟他这个代码的区别,他是store是用SimpleStore,我是用DirectStore.
    再一个区别是,他是ext2.0或3.0的,我用的是4.0的,下面, 我贴出主要代码吧          defaults: {xtype: "textfield", allowBlank: true, border: false, width: 182, labelWidth: 55},
    layout: "anchor",
             baseCls: "ex-panel",          width: 217,
    items:
            [ {
    xtype: "combobox",
    fieldLabel: "省份",
    name: "userProvince",
    emptyText: "请选择省份",
    store: provinceStore,
                        queryMode: "local",
                        displayField: "provinceName",
                        valueField: "provinceNo",
                        triggerAction: "all",    
                listeners: 
                {
                    select: function(field, value, options) 
                    {
                     var provinceNo = value[0].raw.provinceNo;
                     cityStore = new App.MyDirectStore(provinceNo);//App.MyDirectStore为自定义的类,这里,类似这样的做法,经验证,能取得到cityStore的值
                    
                     var userCityCombo = Ext.getCmp("userCity");
                     userCityCombo.setRawValue("");
                     userCityCombo.setValue("");                  userCityCombo.store = cityStore;
                     userCityCombo.store.load(); 
                    }   
        } 
    },
    {
    xtype: "combobox",
    fieldLabel: "城市",
    name: "userCity",
    id: "userCity",
    emptyText: "请选择城市",
        store: cityStore,
                        queryMode: "local",
                        displayField : "cityName",
                        valueField: "cityNo",
                        triggerAction: "all"
    }
    ]这两个省份与城市,是属于form里面的两个textfield
    这里,之所以觉得奇怪,是因为,只要点了城市的,就无效了,第一次先点省份时,城市有效,此时,点了下城市的,再去点省份就无效了,如果是store有问题,没取到值,那第一次,也不应该取到值啊,怪就怪在这里
      

  3.   

    点击城市与省份的store不会产生关联啊 你的城市下拉框也没有listeners啊 
    看了楼主代码 如果楼主确定App.MyDirectStore 这个能返回正确的store的话 我一时也还真没发现有哪不顺眼 
    还有其他地方处理了这两个下拉框么 ?
      

  4.   

    lz的store的数据是页面加载的时候就已经读出来然后用data绑的吗?
      

  5.   

    用其它方式解决了,感谢各位参与
    4楼说的城市也要加监听是不对的,是省份控制城市,而不是城市控制省份,所以城市那里不用加监听
    5楼,我store数据加载之前就已经读出来了
    关于这个问题,我估计,十之八九是bug的了,没办法,4.0刚出来不久,问题很多,也不奇怪。