2016-03-03 145 views
2

我從使用某些XML數據創建TreeView(使用MetroUI)的遞歸函數遇到了一些問題。在第一個作用域中,樹的第一級如期創建,但第二個未創建。我的XML數據的結構如下:遞歸無法正常工作

<tree> 
    <sitenode> 
    <name>First Element</name> 
    <children> 
     <sitenode> 
     ... 
     </sitenode> 
    </children> 
    </sitenode> 
</tree> 

我使用的JavaScript的代碼是這樣一個:

var tree = $('#dlgEditorCreateNewSiteSelParent').data('treeview'); 
 

 
/* Helper-function for Recursion */ 
 
function dlgEditorCreateNewSiteCreateParentTreeViewNodes(nodes, parent) { 
 
    var i, j; 
 
    /* Alle knoten durchlaudfen */ 
 
    for (i = 0; i < nodes.length; i++) { 
 

 
    /* Add leaf */ 
 
    var node = tree.addLeaf(parent, $(nodes[i]).find('>name').text()); 
 

 
    /* Children */ 
 
    var children = $(nodes[i]).find('children > sitenode'); 
 

 
    for (j = 0; j < children.length; j++) { 
 
     /* REKURSION */ 
 
     //alert('childre child nr. '+j+' with name '+$(children[j]).find('> name').text()); 
 
     dlgEditorCreateNewSiteCreateParentTreeViewNodes(children[j], node); 
 
    } 
 
    } 
 
} 
 

 
var roots = $(result).find('tree > sitenode'); 
 
dlgEditorCreateNewSiteCreateParentTreeViewNodes(roots, false);
通過調試與Firefox的代碼,它似乎是一樣,如果第一個處理範圍功能正常,但在第二個中(通過處理子項),調試器立即跳轉(在遞歸調用函數後)到第二個for循環中,並且大部分變量都是「未定義的」。

我已經搜索了一些類似的問題,但我發現的一切都是關於反變量的範圍。

回答

0
for (j = 0; j < children.length; j++) { 
    /* REKURSION */ 
    //alert('childre child nr. '+j+' with name '+$(children[j]).find('> name').text()); 
    dlgEditorCreateNewSiteCreateParentTreeViewNodes(children[j], node); 
} 

這應該工作,我不知道,但..

children.forEach(function(child) { 
    dlgEditorCreateNewSiteCreateParentTreeViewNodes(child, this); 
}, node); 
+0

感謝,但這並沒有工作。但是我發現了另一種通過將完整數組傳遞給遞歸來解決問題的方法。最後一段時間我有點失落(你是否在英文中這樣說?) –