+ -
当前位置:首页 → 问答吧 → 是我见鬼了还是extjs4.0的bug,居然遇到这么奇怪的问题,先汗下

是我见鬼了还是extjs4.0的bug,居然遇到这么奇怪的问题,先汗下

时间:2011-09-14

来源:互联网

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

作者: xzy88   发布时间: 2011-09-14

是你的问题吧。

作者: BLUE_LG   发布时间: 2011-09-14

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

作者: BLUE_LG   发布时间: 2011-09-14

引用 2 楼 blue_lg 的回复:
http://lamper571.iteye.com/blog/213028用这上面的例子试试看。

首先,我说下我跟他这个代码的区别,他是store是用SimpleStore,我是用DirectStore.
再一个区别是,他是ext2.0或3.0的,我用的是4.0的,下面, 我贴出主要代码吧
JScript code

                                        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有问题,没取到值,那第一次,也不应该取到值啊,怪就怪在这里

作者: xzy88   发布时间: 2011-09-14