2012-11-13 10:21题主

联动查询时的数据源异步请求

根据示例里面的Popup Menu,做了一个类似的下拉表格Combox,点击下拉表格的记录时,设置数据到相应的文本框如图所示:
点击表格时事件,会加载父类类目数据源来填充父类类目及名称的文本框:
怎么第一次点击数据时,没有成功加载父类类目数据源,要点击第二次才能正确加载?
第一次点击:
===========================================================================================
第二次点击:
===========================================================================================
选择另一项:
再次点击重新选择的项目:

2012-11-13 10:58#1
你的问题原因是混淆了同步和异步加载机制。
默认store都是异步加载的,store的加载成功与否需在其事件load或exception中监听。
下拉表格的autoLoad属性先设置为false(默认为true),在点combo的下拉按钮时,再动态load关联的store,然后在store的load事件中再弹出下拉表格。
另外WebBuilder在运行期间都会为开发期间添加的组件创建实例对象,不需要再Ext.getCmp('myComp')去获取对象,直接使用myComp.method()之类的调用即可。
2012-11-13 11:33#2
根据你的提示,效果还是一样的……亲!帮我看看吧
2012-11-13 11:51#3
1.Wb.load(find_sub_keyStore,{s_findKey:record.data.s_key}); //加载父级数据源
2.if(find_sub_keyStore.count()<1){ //没有加载数据成功,重新加载一次
这个写法肯定是有问题的,第1行代码Wb.load()之后执行第2行代码,store不一定已经加载。
2012-11-13 14:27#4
我那是为了调试才这样写的,代码只这6行:
s_sec_key.setValue(record.data.s_key); //行业类别
s_sec_name.setValue(record.data.s_name); //名称
Wb.load(find_sub_keyStore,{s_findKey:record.data.s_key}); //加载父级数据源
s_key.setValue(find_sub_keyStore.getAt(0).get("s_key")); //设置父类类目
s_name.setValue(find_sub_keyStore.getAt(0).get("s_name")); //父类名称
sec_keyMenu.hide();
2012-11-13 14:39#5
s_sec_key.setValue(record.data.s_key); //行业类别 应该使用record.get('s_key')取值
s_sec_name.setValue(record.data.s_name); //名称
Wb.load(find_sub_keyStore,{s_findKey:record.data.s_key}); //加载父级数据源
上面这行代码find_sub_keyStore是异步加载的,非同步
s_key.setValue(find_sub_keyStore.getAt(0).get("s_key")); //设置父类类目
执行上面这行代码时find_sub_keyStore还没有加载,自然取不到值,应该在store的load事件中监听。
s_name.setValue(find_sub_keyStore.getAt(0).get("s_name")); //父类名称
sec_keyMenu.hide();
2012-11-13 15:33#6
THX.

返回开发者社区