我的目标是获取包含嵌套评论的 json 数据(例如 hackernews 或 reddit)并将其显示在我的 qml 应用程序中。 我找到了如何从嵌套模型创建 TreeView : 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。 因此,我获取了 elements 数组中的最后一个节点,并递归地向其中添加子节点。
我不确定注释的格式是什么样的,但我相信通过一些修改,下面的代码可以帮助您实现您想要的。
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;
}
关于javascript - QML:如何使用 javascript 创建嵌套模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26821600/