Extjs 如何从TreePanel生成自定义JSON
我试图从一个可编辑的树面板生成JSON。我能够生成JSON,但希望JSON只包含某些字段 下面是我如何通过遍历生成JSON的Extjs 如何从TreePanel生成自定义JSON,extjs,getjson,treepanel,Extjs,Getjson,Treepanel,我试图从一个可编辑的树面板生成JSON。我能够生成JSON,但希望JSON只包含某些字段 下面是我如何通过遍历生成JSON的 function getNodeList(bfsQueue) { var node = bfsQueue.pop(); var nodeQueue = []; for (var ii = 0; ii < node.childNodes.length; ii++) { bfsQueue.push
function getNodeList(bfsQueue) {
var node = bfsQueue.pop();
var nodeQueue = [];
for (var ii = 0; ii < node.childNodes.length; ii++) {
bfsQueue.push( node.childNodes[ii] );
nodeQueue.push( node.childNodes[ii] );
}
if (bfsQueue.length === 0) {
return nodeQueue;
} else {
return nodeQueue.concat( getNodeList(bfsQueue) );
}
}
}
我需要这种格式。只是几个领域,不是全部
{
"text": "Src",
"id": "src",
"parentId": null,
"root": true,
"leaf": "",
"depth": 0,
"children": [
{
"text": "United Kingdom",
"id": "United Kingdom",
"parentId": "src",
"root": "",
"leaf": "",
"depth": 1,
"children": [
{
"text": "London",
"id": "London",
"parentId": "United Kingdom",
"root": "",
"leaf": "",
"depth": 2
}
]
}
]
}
请帮忙。提前谢谢 只需选择结果中所需的字段即可 例如:
function getNodeData(node, fields) {
var data = {};
// loop through desired fields
Ext.each(fields, function(fieldName) {
data[fieldName] = node.get(fieldName);
});
if (node.hasChildNodes()) {
var children = data.children = [];
node.eachChild(function(child) {
children.push(getNodeData(child, fields));
});
}
return data;
}
用法:
var fields = ['text', 'id', 'parentId', 'root', 'leaf', 'depth'],
nodeList = getNodeData(tree.getRootNode(), fields);
那对我不起作用。现在它在警报中显示未定义。您已经注意到我没有使用与您相同的函数名,对吗?我的不好…抱歉!!我很抱歉,请忽略前面的评论。我做了一件非常愚蠢的事。成功了。谢谢你,伙计!是的,我注意到函数名不同。
function getNodeData(node, fields) {
var data = {};
// loop through desired fields
Ext.each(fields, function(fieldName) {
data[fieldName] = node.get(fieldName);
});
if (node.hasChildNodes()) {
var children = data.children = [];
node.eachChild(function(child) {
children.push(getNodeData(child, fields));
});
}
return data;
}
var fields = ['text', 'id', 'parentId', 'root', 'leaf', 'depth'],
nodeList = getNodeData(tree.getRootNode(), fields);