extjs store中数据转换成json
主要有以下两种方法:
1.
var jsonData = Ext.encode(Ext.pluck(store.data.items, 'data'));
2.
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);
项目中需要将添加或者修改过的的积分兑换奖品记录传给后台,例如。
'fenexchyuliu button#SaveBtn' : {
click : function(btn) {
var grid = btn.up('gridpanel');
var mr = grid.getStore().getModifiedRecords().slice(0);// 复制所有更新过的记录
var recordCount = grid.getStore().getCount();// 获取数据集中记录的数量
alert(mr.length);
if (mr.length == 0) { // 确认修改记录数量
alert("没有修改数据!");
return;
};
var datar = new Array();
for (var i = 0; i < mr.length; i++) {
datar.push(mr[i].data);
}
Share.AjaxRequest({
url : 'fen/rsvnfen',
params : {
listdata : Ext.encode(datar),
loadname : btn.up("window").loadname
},
callback : function() {
btn.up("window").close();
}
});
}
}
Plucks the value of a property from each item in the Array. Example:
Ext.Array.pluck(Ext.query("p"), "className"); // [el1.className, el2.className, ..., elN.className]
Available since: 4.0.0
Parameters
- array : Array/NodeList
The Array of items to pluck the value from.
- propertyName : String
The property name to pluck from each element.
Returns
The value from each item in the Array.
上面的示例中用到了数组对象的Slice(start,[end])方法,该方法返回一个新数组,包含了原函数从start到end所指定的元素,但是不包括end元素,比如a.slice(0,3)。如果start为负,则将它作为length+start处理(此处length为数组的长度,比如a.slice(-3,4),相当于a.slice(2,4))。如果end为负,就将它作为length+end处理(次数length为数组的长度,比如a.slice(0,-1)。如果省略end,那么slice方法将一直复制到原数组结尾,比如a.slice(1))。如果省略end,那么slice方法将一直复制到原数组结尾,比如a.slice(1)。如果end出现在start之前,不复制任何元素到新数组中,比如a.slice(4,3)。示例中store.getModifiedRecords().slice(0)的作用就是复制store.getModifiedRecords(),保证store.getModifiedRecords()中的原始数据不受影响。