问题描述
有一个store的load事件中,调用了另外一个store的load事件所查询出来的值。但是由于异步的问题,取不到值(红字部分)。望大家指点,应该怎么改。先谢过!//根据设备类型编号,取得设备类型名称 function getEquipmentTypeName(bh){ var resultName; //连接后台数据 var dataToText = new Ext.data.Store({ url: '../equipmentManage/equipmentPath.aspx', baseParams: {module: 'getEquipmentTypeName',tx:bh}, reader: new Ext.data.XmlReader( {record: 'Table', id: 'success'}, ['WZFL003'] ), listeners: { "load": function() { //遍历数据 if (dataToText.getAt(0).id == 'true') { resultName= dataToText.getAt(0).data['WZFL003']; }else{ resultName = ""; } } } }); //加载数据 dataToText.load(); return resultName; } //根据物资名称,查询出物资类型路径 function searchData(mc){ var bh; var f1; var f2; //连接后台数据 var dataToText = new Ext.data.Store({ url: '../BackGroundData.aspx', baseParams: {module: 'getEquipmentPath',tx:mc}, reader: new Ext.data.XmlReader( {record: 'Table', id: 'success'}, ['WZFL001','WZFL003'] ), listeners: { "load": function() { //遍历数据 if (dataToText.getAt(0).id == 'true') { bh = dataToText.getAt(0).data['WZFL001']; f1 = getEquipmentTypeName(bh.substr(0,2)); alert(f1); f2 = getEquipmentTypeName(bh.substr(0,7)); alert(f2); Ext.getCmp("lblPath").setText("(00"+dataToText.getAt(0).data['WZFL001'].substr(0,2)+")"+ f1 + "->" + f2 + "->" +dataToText.getAt(0).data['WZFL003']); }else{ Ext.MessageBox.alert('查询提示','该物品不存在!'); Ext.getCmp("lblPath").setText(""); } } } }); //加载数据 dataToText.load(); }
解决方案
这里我提供一个我个人的思路,项目中已经使用了。 var dataToText = new Ext.data.Store({ url: '../equipmentManage/equipmentPath.aspx', baseParams: {module: 'getEquipmentTypeName',tx:bh}, reader: new Ext.data.XmlReader( {record: 'Table', id: 'success'}, ['WZFL003'] ), listeners: { "load": function() { //遍历数据 if (dataToText.getAt(0).id == 'true') { resultName= dataToText.getAt(0).data['WZFL003']; }else{ resultName = ""; } } } }); 你这里其实就是从服务端取出数据,那这里个人觉得你可以改造下,把从服务端返回的数据放入同步的Ext.Ajax请求中,把返回的xml数据解析成一个Array,把Ext.data.XmlReader改造成本地的Ext.data.ArrayReader进行加载,后面的代码也不用变。这样子即可。不过Ext从在2.X(准确版本忘记了)开始只支持异步加载数据,你可以使用第三方的扩展来解决.//搜索下Ext.Ajax 同步,就可以找到google code上的一个支持同步Ajax Request扩展连接http://code.google.com/p/ext-basex/改造后的代码片段大概如下:1、Ext.Ajax 同步请求数据2、Ext.data.ArrayReader组装数据3、你后面的代满