要做一个销售记录的grid,有一列是售货员
用个store远程读取数据库表,表里面的售货员字段是外键,引用员工表的员工编号。
但在前台显示grid的数据的时候,给用户看的当然是售货员的名字而非编号。所以在建grid.ColumnModel的时候对售货员这一列进行处理:
header : '售货员',
dataIndex : 'sales',
renderer : renderer_sale
之后想通过renderer_sale这个函数里面向后台请求数据,传进去编号获取售货员的名字
- JScript code
var renderer_sale = function(value) { Ext.Ajax.request({ url : "emp/findNameByCode.action", params : { "empCode" : value }, method : 'POST', success : function(response) { var respText = Ext.decode(response.responseText); if (respText.success ==true) { return respText.name; } else { Ext.example.msg("警告", "失败鸟", "msg-box-error"); } }, failure : function() { Ext.example.msg("警告", "ajax请求失败", "msg-box-error"); } }); };
问题来了:经调试,respText.success ==true值确实为true,对respText.name进行alert的话也可以弹出售货员的名字,但grid那一列总是空白。调试时发现,由于Ext.Ajax.request是异步请求,renderer函数跑完了,而request的数据尚未返回,此时grid已经显示。
请问有什么方法可以等待request返回值之后再结束renderer函数?
或者有其他的办法可以实现我的需求?
各位大神求解救,非常感谢
------解决方案--------------------
首先我认为你的这个解决问题的方向似乎不妥,如果每个 renderer 都发送一个 ajax 请求的话,那得增加多少无谓的网络负载呀?
正确的做法应该是在“store远程读取数据库表”,服务端就通过关联查询把“售货员的名字”一并包含在返回的结果里。
不过,就事论事的话,如果你真要用 ajax 来获取 renderer 的内容,可以在 ajax 的 callback 里面再更新 cell 的内容。
――――――――――――――――――――――――――――――――
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
------解决方案--------------------
lz 把ajax方法调成同步的试试看。我觉得是在你grid渲染的同时,去异步请求数据。这样会导致grid渲染完了,但数据还没有回来。试试同步吧。async : false