QML:如何使用javascript创建嵌套模型

QML: How to create a nested model with javascript?

本文关键字:创建 嵌套 模型 javascript 何使用 QML      更新时间:2023-09-26

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

现在我正试图弄清楚如何使用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
                });
            }
        }

但是,我如何将子元素添加到这些元素中(以及递归地为这些子元素添加子元素等)?

可能有几种方法可以做到这一点,但我无法使用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;
}