ExtJs异步无法向外传值和赋值的完美解决办法
1、Ext.data.Store.load();方法是异步的,下面的方式获得的reCount始终是0,因为还没等后台的方法执行完就赋值了,此时store的record还没获得值。
vartestStore=newExt.data.GroupingStore({
proxy:newExt.data.HttpProxy({
url:''
}),
reader:newExt.data.JsonReader({
root:'hstamcx',
totalProperty:"results",
fields:["id","value"]
})
});
Ext.onReady(function(){
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget='side';
testStore.load();
varreCount=testStore.getCount();
varport=newExt.Viewport({
layout:'auto',
frame:true,
items:[winKey]
});
});
2、如果想要对加载的值进行处理,必须将后续处理写在回调函数中。
Ext.onReady(function(){
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget='side';
testStore.load({
callback:function(r,options,success){
varreCount=testStore.getCount();
}
});
varport=newExt.Viewport({
layout:'auto',
frame:true,
items:[winKey]
});
});
此时可以获得reCount的值,并且callback:function(r,options,success)的r就是store加载查到的数据。
但依然存在问题:r的数据值只能在回调函数里面使用,在callback函数里既不能给外部的其他元素赋值,也没有办法将r数据传到外面去
3、如果想在js页面向后台发送请求,并在外面使用后台返回的数据值,可以使用Ext.Ajax.request,并将请求方式设置成同步,接收数据的变量要定义在Ext.Ajax.request外面
varcancelMode;
Ext.Ajax.request({
url:'',
method:'post',
sync:true,//同步请求
success:function(response){
varresponse=Ext.util.JSON.decode(response.responseText);
cancelMode=response.hstamcx[0].param_value;
}
});
此时就可以在外面使用Ext.Ajax.request的请求获得的数据了,比如alert(cancelMode);
后台代码示例:该示例是举个大概例子,并不是完整代码
publicvoidgetData(HttpServletResponseresponse){
TestDatatd=TestDataDao.getTestdata();
Stringmessage="{name:"+td.getName()+",id:"+td.getId()+"}";
PrintWriterout=response.getWriter();
out.write(message);
out.flush();
}
以上所述是小编给大家介绍的ExtJs异步无法向外传值和赋值的完美解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!