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-循环,我的大部分变量都是“未定义的”。

我已经搜索了一些类似的问题,但我发现的一切都是关于反变量范围的。

4

1 回答 1

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);
于 2016-03-03T09:15:03.547 回答