前言,常规的ExtJS的Store,在new一个Store控件的时候,加上proxy属性,指向URL,在URL里返回特定格式的JSON数据即可。
即:
var store = new Ext.data.Store({
// 获取数据的方式
proxy : new Ext.data.HttpProxy({
url : 'cardSell.ered?reqCode=queryCrdSellList4CX'
}),
});
我们这里要说的,是引用前台JS生成的Array,将Array塞入到Store中,显示在列表中,(或是需求中有要求先查询一个FORM,若合格,再将数据塞入到Store中。
1、Store的proxy属性填写自己的data数据。
/**
* 数据存储
*/
var store = new Ext.data.Store({
// 获取数据的方式
proxy: new Ext.data.MemoryProxy(data),
});
2、我们在步骤1中已经填写了获取Store数据的方式,那么,我们接下来要赋值给data,并将Store数据load进去。
/**重要**/
var list = result.cardinfo;
data = {TOTALCOUNT:list.length, ROOT:list};
store.loadData(data);
此处的list是JS对象的Array。
其JSON格式result如下:(后台response其JSON格式的数据到前台。)
{"cardinfo":[{"numb":"1","name":"007"},{"numb":"2","name":"008}]}
3、取出Store中的全部数据,再封装成JSON格式,传回后台。(extjs store中数据转换成json)。
主要有以下两种方法:
a\
var jsonData = Ext.encode(Ext.pluck(store.data.items, 'data'));
b\
var datar = new Array();
var jsonDataEncode = "";
var records = store.getRange();
for (var i = 0; i < records.length; i++) {
datar.push(records[i].data);
}
jsonDataEncode = Ext.util.JSON.encode(datar);
测试了下a方法,其jsonData的值如下:这样传送到后台,能用JACKSON等JSON工具转成LIST列表。
[{"numb":"1","name":"007"},{"numb":"2","name":"008"}]
补充自己的一些特定类:
由于公司后台没用JACKSON等JSON工具类,而只有一种将JSON格式的数据转成LIST的方法,如下:(因为不想改底层,JSON转LIST平时也用不大到)
/**
* 将复杂Json资料格式转换为List对象
*
* @param jsonString
* 复杂Json对象,格式必须符合如下契约<br>
* {"1":{"name":"托尼.贾","age":"27"},
* "2":{"name":"甄子丹","age":"72"}}
* @return List
*/
public static List parseJson2List(String jsonString) {
List list = new ArrayList();
JSONObject jbJsonObject = JSONObject.fromObject(jsonString);
Iterator iterator = jbJsonObject.keySet().iterator();
while (iterator.hasNext()) {
Dto dto = parseSingleJson2Dto(jbJsonObject.getString(iterator.next().toString()));
list.add(dto);
}
return list;
}
为了改成此工具能转化的JSON,将Store转JSON格式数据稍作改动,此方法纯属记录一下。(以免以后自己要用到)
var records = store.getRange();
var totaldata = "{";
for (var i = 0; i < records.length; i++) {
var data = records[i].data;
var sdata = Ext.util.JSON.encode(data);
sdata = "\"" + (i + 1) + "\":" + sdata + ",";
totaldata = totaldata + sdata;
}
totaldata = totaldata.substring(0,totaldata.length - 1) + "}";
totaldata就是已转好的格式,类似:{"1":{"name":"托尼.贾","age":"27"},"2":{"name":"甄子丹","age":"72"}}。