精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-22
最后修改:2009-09-22
问题是,我在一个页面上有两个ComboBox,数据来源是同一个action(我使用的struts2) 还是看看代码吧 var store_comBox_volt = new Ext.data.JsonStore({ url : "dropAction!getVoltDrop.action", root : 'volt', fields : ['id', 'name'] }); store_comBox_volt.load() var comBox_volt = new Ext.form.ComboBox({ // combobox fieldLabel : '电压等级', displayField : 'key', width:'50', mode : 'local', store : store_comBox_volt, displayField : 'name', valueField : 'id', forceSelection : true, triggerAction : 'all', selectOnFocus : true, typeAhead : true }); var store_comBox_org = new Ext.data.JsonStore({ url : "dropAction!getOrgsDrop.action", root : 'orgs', fields : ['id', 'name'] }); store_comBox_org.load(); var comBox_org = new Ext.form.ComboBox({ // combobox fieldLabel : '管理单位', displayField : 'key', mode : 'local', store : store_comBox_org, displayField : 'name', forceSelection : true, triggerAction : 'all', selectOnFocus : true, typeAhead : true }); 后台处理正常,但在页面上不显示。不知道什么原因。后来,在网上看到:EXT用定时检查的方法处理连接是否正常结束的问题,每50毫秒一次。 我就在store_comBox_org上加一个定时器。 setTimeout(function(){store_comBox_volt.load()},100); 这样就正常了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-09-22
var store_comBox_volt = new Ext.data.JsonStore({ url : "dropAction!getVoltDrop.action", root : 'volt', fields : ['id', 'name'] }); var comBox_volt = new Ext.form.ComboBox({ // combobox fieldLabel : '电压等级', displayField : 'key', width:'50', mode : 'local', store : store_comBox_volt, displayField : 'name', valueField : 'id', forceSelection : true, triggerAction : 'all', selectOnFocus : true, typeAhead : true }); //move store_comBox_volt.load() var store_comBox_org = new Ext.data.JsonStore({ url : "dropAction!getOrgsDrop.action", root : 'orgs', fields : ['id', 'name'] }); var comBox_org = new Ext.form.ComboBox({ // combobox fieldLabel : '管理单位', displayField : 'key', mode : 'local', store : store_comBox_org, displayField : 'name', forceSelection : true, triggerAction : 'all', selectOnFocus : true, typeAhead : true }); //move store_comBox_org.load(); |
|
返回顶楼 | |
发表时间:2009-09-23
最后修改:2009-09-23
store_comBox_volt.load()
放在comBox_volt后也不行。 我又试了试,comBox_volt.getStore().load() 还是有问题。点击下拉框不显示。 我在调试的时候,加一个断点或使用alert(),停顿一下就可以了。我才想到使用setTimeout。 估计是异步惹的祸。 不知道什么原因。 |
|
返回顶楼 | |
发表时间:2009-09-23
mode : 'local', .....
|
|
返回顶楼 | |
发表时间:2009-09-23
最后修改:2009-09-23
谢谢你的回复,不是没加mode : 'local'引起的问题,
今天又调试了一下午,怀疑不是事extjs的问题。 我在action中直接输出需要的字符串,没有问题。但是有hibernate取就有问题。 怀疑和hibernate有关。两个并发的线程使用同一个session。 我的实验是把取数据部分去掉,直接把要输出的字符串out出来,就一切正常。使用hibernate取数据就有问题。 public String getVoltDrop() throws Exception { try { /* List<TpParaVolt> list = dropServ.getVoltDropList(); JSONArray jsonArray = new JSONArray(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { TpParaVolt volts = (TpParaVolt) iterator.next(); Map map = new HashMap(); map.put("id", volts.getVoltCode()); map.put("name", volts.getVoltName()); jsonArray.add(map); } super.outJsonArray(jsonArray, "volt");*/ String str="{\"volt\":[{\"id\":\"2\",\"name\":\"220\"},{\"id\":\"5\",\"name\":\"500\"},{\"id\":\"AC00101\",\"name\":\"10kV\"},{\"id\":\"AC00351\",\"name\":\"35kV\"},{\"id\":\"AC00661\",\"name\":\"66kV\"},{\"id\":\"AC01101\",\"name\":\"110kV\"},{\"id\":\"AC02201\",\"name\":\"220kV\"},{\"id\":\"AC05001\",\"name\":\"500kV\"},{\"id\":\"AC07501\",\"name\":\"750kV\"}]}"; super.outJsonString(str); } catch (Exception e) { logger.debug("showNode执行失败!" + e); e.printStackTrace(); } return null; } |
|
返回顶楼 | |
发表时间:2009-09-24
用firebug看ajax的response即知
|
|
返回顶楼 | |
发表时间:2009-09-24
最后修改:2009-09-24
看了一下,
第一个请求的数据返回到第二个里了。 管理单位和电压等级的数据是两个请求,第一个请求返回为空,第二个请求返回的是管理单位和电压等级两个数据。 本来应该是orgs返回管理单位的请求里,现在都在电压等级的请求了里返回了,并且volt还返回两个。 {"orgs":[{"id":"440000","name":"???????"},{"id":"SS0000","name":"?????"},{"id":"CC0000","name":"??????"},{"id":"450000","name":"???????"},{"id":"460000","name":"??????"},{"id":"520000","name":"??????"},{"id":"530000","name":"??????"}]} {"volt":[{"id":"2","name":"220"},{"id":"5","name":"500"},{"id":"AC00101","name":"10kV"},{"id":"AC00351","name":"35kV"},{"id":"AC00661","name":"66kV"},{"id":"AC01101","name":"110kV"},{"id":"AC02201","name":"220kV"},{"id":"AC05001","name":"500kV"},{"id":"AC07501","name":"750kV"}]} {"volt":[{"id":"2","name":"220"},{"id":"5","name":"500"},{"id":"AC00101","name":"10kV"},{"id":"AC00351","name":"35kV"},{"id":"AC00661","name":"66kV"},{"id":"AC01101","name":"110kV"},{"id":"AC02201","name":"220kV"},{"id":"AC05001","name":"500kV"},{"id":"AC07501","name":"750kV"}]} 我使用延迟请求的方式,有时也不行。大部分可以。 郁闷!不知道怎么解决了。 |
|
返回顶楼 | |
发表时间:2009-09-24
你2个store里的root不一样
|
|
返回顶楼 | |
发表时间:2009-09-24
1.jsonStore定义的时候autoLoad设置为true
2.mode="remote" 试试看行不 |
|
返回顶楼 | |
发表时间:2009-09-25
最后修改:2009-09-25
我觉得是extjs 并行执行取数据的原因。我现在改成串行的就解决了。
我是这样解决的: 在第一个load()上加一个callback()。让第一个load返回后再执行下一个load。 这样就可以了,就是效率第一点。并且感觉也不是最好的解决方法。如果有四个五个的,就要增加很到代码,还加深了程序的耦合,不利于维护。 不知谁有更好的解决方法? |
|
返回顶楼 | |