我如何将 ExtJS AJAX 代理返回的原始数据对象修改为 JSON 对象以供 Tree Store 使用
How do i modify a raw data object returned by an ExtJS AJAX proxy into a JSON object to be consumed by a Tree Store
为了创建一个 treepanel,我用一个 treestore 配置它,它的 AJAX 代理 url 接收我无法控制的 json 数据。但是在 readRecords 执行之前使用 Ext.data.reader.Json
的 transform
property 可调用,可以选择将来自 AJAX 代理的传递的原始(反序列化)数据对象修改为修改后的或全新的数据对象。 transform
配置,给出以下代码片段:
Ext.create('Ext.data.Store', {
model: 'User',
proxy: {
type: 'ajax',
url : 'users.json',
reader: {
type: 'json',
transform: {
fn: function(data) {
// do some manipulation of the raw data object
return data;
},
scope: this
}
}
},
});
我想举例说明如何修改 return JSON 对象
[
{
"id": 3,
"attributes":
{},
"name": "user_one",
"login": "",
"email": "user_one@ats",
"phone": "0751223344",
"readonly": false,
"administrator": false,
"password": null
},
{
"id": 4,
"attributes":
{},
"name": "user_two",
"login": "",
"email": "user_two@ats",
"phone": "0751556677",
"readonly": false,
"administrator": false,
"password": null
}
]
进入适合树存储的 JSON 对象。
层级树将被呈现以显示哪个用户在哪个管理员下使用来自 returned JSON 的条件 administrator==true
,然后是第二个 AJAX请求 return 此处显示的管理员用户。
[
{
"user_id": 3,
"admin_id": 1,
},
{
"user_id": 4,
"admin_id": 2,
}
]
数据是否完全嵌套?否则为什么要使用树面板而不是网格?不过对于你的问题,这取决于你如何配置你的树面板,但它可能是这样的:
transform: {
fn: function(data) {
var treeRecords = Ext.Array.map(data, function(i){
return {
text: i.name,
leaf: true
//any other properties you want
}
});
var treeData = {
root: {
expanded: true,
children: treeRecords
}
};
return treeData;
},
scope: this
}
为了创建一个 treepanel,我用一个 treestore 配置它,它的 AJAX 代理 url 接收我无法控制的 json 数据。但是在 readRecords 执行之前使用 Ext.data.reader.Json
的 transform
property 可调用,可以选择将来自 AJAX 代理的传递的原始(反序列化)数据对象修改为修改后的或全新的数据对象。 transform
配置,给出以下代码片段:
Ext.create('Ext.data.Store', {
model: 'User',
proxy: {
type: 'ajax',
url : 'users.json',
reader: {
type: 'json',
transform: {
fn: function(data) {
// do some manipulation of the raw data object
return data;
},
scope: this
}
}
},
});
我想举例说明如何修改 return JSON 对象
[
{
"id": 3,
"attributes":
{},
"name": "user_one",
"login": "",
"email": "user_one@ats",
"phone": "0751223344",
"readonly": false,
"administrator": false,
"password": null
},
{
"id": 4,
"attributes":
{},
"name": "user_two",
"login": "",
"email": "user_two@ats",
"phone": "0751556677",
"readonly": false,
"administrator": false,
"password": null
}
]
进入适合树存储的 JSON 对象。
层级树将被呈现以显示哪个用户在哪个管理员下使用来自 returned JSON 的条件 administrator==true
,然后是第二个 AJAX请求 return 此处显示的管理员用户。
[
{
"user_id": 3,
"admin_id": 1,
},
{
"user_id": 4,
"admin_id": 2,
}
]
数据是否完全嵌套?否则为什么要使用树面板而不是网格?不过对于你的问题,这取决于你如何配置你的树面板,但它可能是这样的:
transform: {
fn: function(data) {
var treeRecords = Ext.Array.map(data, function(i){
return {
text: i.name,
leaf: true
//any other properties you want
}
});
var treeData = {
root: {
expanded: true,
children: treeRecords
}
};
return treeData;
},
scope: this
}