我需要为网格表字段列表创建一个json字符串。需要将它们发送给java后端。
我必须发送
id,
name,
listOfProjects,
listOfProjects包含以下列表,此列表可能包含多个项目。
prjId,
prjName
请告诉我如何创建json字符串?
我尝试使用以下代码示例
var dataStr = new Object();
dataStr.id=myId;
dataStr.name="myName";
dataStr.plist = new Array();
dataStr.plist[0].prjId=1stId;
dataStr.plist[0].prjName="1stName";
dataStr.plist[1].prjId=2ndId;
dataStr.plist[1].prjName="2ndName";
dataStr.plist[2].prjId=3rdId;
dataStr.plist[2].prjName="3rdName";
var data = Ext.JSON.encode(dataStr);
Ext.Ajax.request({
url : '/E2EAT/authentication/userdetails.json',
method : "GET",
headers: {
'Content-Type': 'application/json'
},
params : 'data=' + data ,
useDefaultXhrHeader : false,
withCredentials: true,
});
我可以使用上面的代码,但我需要迭代网格
1。请告诉我如何使用sencha迭代网格?
2。制作json字符串并发送回结束的最佳方法是什么?
答案 0 :(得分:1)
Ext为您提供了两个循环函数:Ext.each
和Ext.iterate
对象。
要迭代网格的列,您可以使用包含Ext.grid.Panel#columns
个实例的Columns
数组属性。例如,为了构建可见列的列表,您可以执行以下操作:
var visibleColumns = [];
Ext.each(grid.columns, function(column) {
// Only columns bound to a field (exludes actions colutions, etc.)
if (!Ext.isEmpty(column.dataIndex)) {
if (column.isVisible()) {
visibleColumns.push({
field: column.dataIndex
,label: column.text
});
}
}
});
网格不一定为底层商店的每个字段都有一个列,它可以有额外的列用于自定义渲染,操作,编号,选择等。因此,您可能希望迭代字段的存储,而不是网格列。在这种情况下,我们正在处理Ext.data.Field
个对象:
// Get a ref to the store's model. Stores always have models; even
// if none is specified explicitly, one is created implicitly.
var model = grid.getStore().model;
var fieldNames = [];
Ext.each(model.getFields(), function(field) {
fieldNames.push(field.name);
});
最后,使用Ext.encode
将数据转换为JSON。此外,您不必自己构建URL查询(params),这可以为代码中可能需要添加一些参数的其他部分提供更大的灵活性:
Ext.Ajax.request({
...
params: {
data: Ext.encode(rawData)
}
});
对于POST请求,您还可以使用jsonData
属性来保存json编码:
Ext.Ajax.request({
...
jsonData: {
data: rawData
}
});
但在许多情况下,最好使用具有适当配置的data proxy和writer的商店,而不是直接的AJAX请求。