如果我得到像这样的Json,那么root
属性值是什么:
{
"status": {
"status": 0,
"msg": "Ok",
"protocolversion": "extjs.json"
},
"value": {
"table": [
[
"admin",
"Administrator",
""
],
[
"test",
"Test",
""
]
],
"total": 2
}
}
数据将显示在gridpanel中,1行为admin,1行为test等。
尝试:
value
,value.table
如何让它发挥作用?
答案 0 :(得分:1)
value.table对于root属性是正确的,但是您使用的是json格式,我认为默认情况下Ext不会设置为处理。它有一个用于json的读取器,用于对象数组,而不是没有对象映射信息的嵌套字段值数组。
如果必须使用该格式,则需要创建自己的读者/编写器或仅使用Ext.Ajax.request(),并在回调中将嵌套数组解析为对象。类似的东西:
Ext.Ajax.request({
url: 'path.com/to/content',
success: function (response, operation) {
var data = Ext.JSON.decode(response.responseText);
var fields = data.value.table;
var records = [];
Ext.Array.each(fields, function (fieldArray, fieldIndex) {
Ext.Array.each(fieldArray, function(fieldValue, valueIndex) {
//Create record object if it doesn't exist
var record = records[valueIndex] || {};
//Create a switch statement based on the array index to set fields
switch(fieldIndex) {
case 0:
record.User_id = fieldValue;
break;
case 1:
record.Username = fieldValue;
break;
}
});
});
//Add the objects to the empty store
store.add(records);
}
});
这不是一种生产解决方案,因为它不会处理列表末尾的空字符串,或者每个字段都有一个锯齿状的数组数组,我无法想象该怎么做。如果它在你的控制或影响范围内,我会建议使用更像Ext建议的格式,这样你就可以使用内置的json代理/读者/编写器,或者对它疯狂并实现ext的远程过程调用格式:
{
"success": true,
"message": "Success",
"data": [
{
"User_id": "admin",
"Username": "Administrator"
}, {
"User_id": "admin",
"Username": "Administrator"
}
]
}
答案 1 :(得分:0)
在上面的例子中,“value”是root属性。但对于JSON阅读器,它是一个属性名称(如果根目录是嵌套的,则是以点分隔的属性名称列表)。
因此您可以在自己的字段中分配以下内容。
字段:[ 'table.admin', 'table.test']