Extjs 如何从TreePanel生成自定义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

我试图从一个可编辑的树面板生成JSON。我能够生成JSON,但希望JSON只包含某些字段

下面是我如何通过遍历生成JSON的

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);