在页面上,多个ext下拉列表读取同一个json数据,要每个下拉都要load一次吗?没load一次的话,又会去执行对应的类去读取json,不load的话不出数据,每个都load的话又有多次读取数据库的问题看下面我的代码。有什么好的方法解决?要只读一次数据库!JSONObject json=new JSONObject();List<TbCommonConst> UserGender=…………
List<TbCommonConst> Marriage=…………
List<TbCommonConst> PoliticStatus=…………
List<TbCommonConst> Education=…………
List<TbCommonConst> PersonStatus=…………JSONArray JUserGender=JSONArray.fromObject(UserGender);
json.put("UserGender", JUserGender);
JSONArray JMarriage=JSONArray.fromObject(Marriage);
json.put("Marriage", JMarriage);
JSONArray JPoliticStatus=JSONArray.fromObject(PoliticStatus);
json.put("PoliticStatus", JPoliticStatus);
JSONArray JEducation=JSONArray.fromObject(Education);
json.put("Education", JEducation);
JSONArray JPersonStatus=JSONArray.fromObject(PersonStatus);
json.put("PersonStatus", JPersonStatus);以上就是json数据,可以顺利输出,而且前台也可以顺利的接收,没问题,问题在下面
var ConstProxy=new Ext.data.HttpProxy({
url:'PersonConst.action'
}); var UserGenderStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'UserGender',
proxy:ConstProxy
});
UserGenderStroe.load();
var PersonStatusStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'PersonStatus',
proxy:ConstProxy
});
PersonStatusStroe.load();
var MarriageStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'Marriage',
proxy:ConstProxy
});
MarriageStroe.load(); var PoliticStatusStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'PoliticStatus',
proxy: new Ext.data.HttpProxy({
url: 'PersonConst.action'
})
});
PoliticStatusStroe.load();
var EducationStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'Education',
proxy:ConstProxy
});
EducationStroe.load(); var editUserGender=new Ext.form.ComboBox
({
fieldLabel: '性别',
hiddenName:'UserGender',
store:UserGenderStroe,
…………
}); var editMarriage=new Ext.form.ComboBox
({
fieldLabel: '性别',
hiddenName:'UserGender',
store:MarriageStroe,
…………
});
…………//一共有5个下拉
看到上面每个stroe都要load一次,如果不load的话对应的combobox就不出数据。
数据源是同一个,要怎么样才能不没个都load一次呢
List<TbCommonConst> Marriage=…………
List<TbCommonConst> PoliticStatus=…………
List<TbCommonConst> Education=…………
List<TbCommonConst> PersonStatus=…………JSONArray JUserGender=JSONArray.fromObject(UserGender);
json.put("UserGender", JUserGender);
JSONArray JMarriage=JSONArray.fromObject(Marriage);
json.put("Marriage", JMarriage);
JSONArray JPoliticStatus=JSONArray.fromObject(PoliticStatus);
json.put("PoliticStatus", JPoliticStatus);
JSONArray JEducation=JSONArray.fromObject(Education);
json.put("Education", JEducation);
JSONArray JPersonStatus=JSONArray.fromObject(PersonStatus);
json.put("PersonStatus", JPersonStatus);以上就是json数据,可以顺利输出,而且前台也可以顺利的接收,没问题,问题在下面
var ConstProxy=new Ext.data.HttpProxy({
url:'PersonConst.action'
}); var UserGenderStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'UserGender',
proxy:ConstProxy
});
UserGenderStroe.load();
var PersonStatusStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'PersonStatus',
proxy:ConstProxy
});
PersonStatusStroe.load();
var MarriageStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'Marriage',
proxy:ConstProxy
});
MarriageStroe.load(); var PoliticStatusStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'PoliticStatus',
proxy: new Ext.data.HttpProxy({
url: 'PersonConst.action'
})
});
PoliticStatusStroe.load();
var EducationStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'Education',
proxy:ConstProxy
});
EducationStroe.load(); var editUserGender=new Ext.form.ComboBox
({
fieldLabel: '性别',
hiddenName:'UserGender',
store:UserGenderStroe,
…………
}); var editMarriage=new Ext.form.ComboBox
({
fieldLabel: '性别',
hiddenName:'UserGender',
store:MarriageStroe,
…………
});
…………//一共有5个下拉
看到上面每个stroe都要load一次,如果不load的话对应的combobox就不出数据。
数据源是同一个,要怎么样才能不没个都load一次呢
我记得写一个jsonStore好像会其中一个下拉杠选择一个值,其它框就会选同样的值 。
3楼。liangj2me。。能给点例子么!!这个问题百度谷歌都不好找关键字。
通过store的loadData()
直接读取本地数据
每个combo的root不一样
怎么取到本地?我这样不算是取到本地么...
你是说取到本地存在一个对象里?要怎么写....给个例子~~
var ConstProxy=new Ext.data.HttpProxy({
url:'PersonConst.action'
});
//上面这个URL是有效的,但在这里还没进去执行读取数据,要怎么才能放到本地呢?怎么定义一个东西来装这些数据?
var UserGenderStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'UserGender',
proxy:ConstProxy
});
//这里一定要load()才能有数据,才会真正执行上面的URL,去读取数据。但这样又得每个都load
UserGenderStroe.load();
你这里的combo加个属性mode:local
设为本地的
你可以先发一个ajax请求到后台
请求成功后 取到数据,在success中
再用你的几个store分别去
store.loadData(Ext.util.JSON.decode(response.responseText))//response.responseText 返回的数据
store中的proxy不需要了
昨天 看到个贴子
http://topic.csdn.net/u/20100823/11/1110eae2-cb82-4869-befd-c04612366872.html可以参考 下
我这个不能用异步。。还有别的方法没
可以用ajax取道数据,返回的数据是一个json、array。然后用js处理赋值个这些combox的data
不用异步,那就不会每个都load了。
如果一定要异步,那是每个都要load的
要改成只调用一次,不用每个combobox都调用,会浪费资源,没效率什么的。
url:'PersonConst.action'
}); var UserGenderStroe=new Ext.data.JsonStore({
fields : ['value','code'],
root:'UserGender',
proxy:ConstProxy
});
UserGenderStroe.load(); var editUserGender=new Ext.form.ComboBox
({
fieldLabel: '性别',
hiddenName:'UserGender',
name:'code',
anchor:"100%",
triggerAction : 'all', //显示所有下列数.必须指定为'all'
store:UserGenderStroe,
valueField:'code',
displayField:'value',
mode: 'local',
editable:false,
emptyText:'请选择一个性别'
});
先用Ext.Ajax.request获得数据放到UserGenderStroe.data 中即可