2016-03-03 3 views
2

У меня есть некоторые проблемы с рекурсивной функцией для создания TreeView (с использованием MetroUI) из некоторых XML-данных. В первой области, поэтому первый уровень дерева создается, как ожидалось, но второй не создается. Мой 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

спасибо, но это не сработало. Но я нашел другой способ решить проблему, передав полный массив в рекурсию. В последние дни я был немного в убытке (вы так говорите в англише?) –

Смежные вопросы