ExtJs异步无法向外传值和赋值的完美解决办法

1、Ext.data.Store.load();方法是异步的,下面的方式获得的reCount始终是0,因为还没等后台方法执行完就赋值了,此时store的record还没获得值。

rush:js;"> var testStore = new Ext.data.GroupingStore({ proxy : new Ext.data.HttpProxy({ url : '' }),reader : new Ext.data.JsonReader({ root : 'hstamcx',totalProperty : "results",fields : ["id","value"] }) }); Ext.onReady(function(){ Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget = 'side'; testStore.load (); var reCount = testStore.getCount(); var port = new Ext.Viewport({ layout : 'auto',frame : true,items : [winKey] }); });

2、如果想要对加载的值进行处理,必须将后续处理写在回调函数中。

rush:js;"> Ext.onReady(function(){ Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget = 'side'; testStore.load({ callback : function(r,options,success) { var reCount = testStore.getCount(); } }); var port = new Ext.Viewport({ layout : 'auto',items : [winKey] }); });

此时可以获得reCount的值,并且callback : function(r,success)的r就是store加载查到的数据。

但依然存在问题:r的数据值只能在回调函数里面使用,在callback函数里既不能给外部的其他元素赋值,也没有办法将r数据传到外面去

3、如果想在js页面后台发送请求,并在外面使用后台返回的数据值,可以使用Ext.Ajax.request,并将请求方式设置成同步,接收数据的变量要定义在Ext.Ajax.request外面

rush:js;"> var cancelMode; Ext.Ajax.request({ url: '',method: 'post',sync:true,//同步请求 success: function(response) { var response = Ext.util.JSON.decode(response.responseText); cancelMode = response.hstamcx[0].param_value; } });

此时就可以在外面使用Ext.Ajax.request的请求获得的数据了,比如alert(cancelMode );

后台代码示例:该示例是举个大概例子,并不是完整代码

rush:js;"> public void getData(HttpServletResponse response){ TestData td = TestDataDao.getTestdata(); String message = "{name:" + td .getName()+ ",id:" + td.getId()+ "}"; PrintWriter out=response.getWriter(); out.write(message); out.flush(); }

以上所述是小编给大家介绍的ExtJs异步无法向外传值和赋值的完美解决办法。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...