weixin_42454269 2011-05-13 00:16
浏览 338
已采纳

急:store异步取值问题

有一个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'];
                            [color=red]f1 =  getEquipmentTypeName(bh.substr(0,2));
                            alert(f1);
                            f2 =  getEquipmentTypeName(bh.substr(0,7));
                            alert(f2);[/color]            
                            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();
    }
  • 写回答

1条回答 默认 最新

  • iteye_15199 2011-05-13 10:51
    关注

    这里我提供一个我个人的思路,项目中已经使用了。
    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、你后面的代满

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名