可以說我有一個Ext.tree.TreePanel對象,它已經從外部文件加載的數據,例如:獲取JSON數據
var tree = new Ext.tree.TreePanel({
...
loader: new Ext.tree.TreeLoader({
dataUrl:'./some_file.json'
}),
...
});
此文件是定義對象數組樹。
假設用戶向樹添加新節點並移動一些節點。是否需要從樹中獲取JSON數據,以便下次用戶加載樹時使用它?
EDIT(代碼解決方案):
這是基於從娟的反應想法的解決方案。我正在把這件事情在任何人發現這個線程在未來,並正在尋找一些代碼。
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));
}
}
var startQueue = [];
var nodeList = [];
startQueue.push(tree.getRootNode());
nodeList.push(tree.getRootNode());
nodeList = nodeList.concat(getNodeList(startQueue));
console.dir(nodeList);
for (var nn = nodeList.length-1; nn >= 0; nn--) {
var params = [];
for (var pp in nodeList[nn].attributes) {
if (pp === "children" || pp === "loader") {continue;}
params.push('"' + pp + '":' + JSON.stringify(nodeList[nn].attributes[pp]) + '');
}
if (nodeList[nn].childNodes.length > 0) {
var childList = [];
for (var ii = 0; ii < nodeList[nn].childNodes.length; ii++) {
childList.push(nodeList[nn].childNodes[ii].json);
}
params.push('"children": [' + childList.join(',') + ']');
}
nodeList[nn].json = "{" + params.join(",") + "}";
}
console.log(nodeList[0].json); // root node
我不知道屬性屬性。那和childNodes數組正是我所需要的。謝謝你的信息! – patorjk 2010-12-08 23:03:11