ExtJS中的Store操作(如何引用已生成的JSON数据)

前言,常规的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"}}。

你可能感兴趣的:(ExtJs)