2014-11-08 66 views
0

我的目标是获取包含嵌套注释的json数据(如hackernews或reddit)并将其显示在我的qml应用程序中。 我发现如何从嵌套模型创建树视图: http://qt-project.org/forums/viewthread/30521QML:如何用javascript创建嵌套模型?

现在我想弄清楚如何使用JavaScript构建嵌套模型。 我需要的是这样的:

ListModel { 
      id: treemodel 
      ListElement { text: "Level 1, Node 1" } 
      ListElement { 
       text: "Level 1, Node 2" 
       children: [ 
        ListElement { text: "Level 2, Node 1" 
         children: [ 
          ListElement { text: "Level 3, Node 1" } 
         ] 
        }, 
        ListElement { text: "Level 2, Node 2" } 
       ] 
      } 
      ListElement { text: "Level 1, Node 3" } 
     } 

我可以添加顶层元素模型,像这样:

 function createCommentsModel() { 
      var i = 0; 
      for (i = 0; i < 5; i++) { 
       treemodel.append ({ 
        text: "Level 1, Node " + i 
       }); 
      } 
     } 

但我怎么加的孩子,这些元素(和子女,这些孩子等,递归)?

回答

1

可能有几种方法可以做到这一点,但我无法使用Qt.createQmlObject()创建ListElement。 因此,我得到元素数组中的最后一个节点,并递归地添加子节点。

我不确定评论的格式是什么样的,但我相信通过下面的代码可以帮助你实现你想要的一些修改。

function createCommentsModel() { 
    treemodel.append ({ 
     text: "Level 1, Node " + i 
    }); 
    //Get last appended node 
    var level1node = treemodel.get(treemodel.count - 1); 
    //Add children recursively 
    addNode(level1node, 2, 1, 3) 
}  

function addNode(node, level, nodenr, maxLevel) { 
    if(node === undefined || level > maxLevel) { 
     return {} 
    } 

    node.elements.append({ 
          text: "Level " + level +", Node " + nodenr, 
          elements: [] 
         }); 
    var child = node.elements.get(node.elements.count - 1); 
    var returnValue = addNode(child, level + 1, nodenr, maxLevel); 
    return returnValue; 
} 
+0

这是完美的,非常感谢你! – 2014-11-09 11:45:37