QML/Javascript:将自引用属性添加到匹配某些标识符的嵌套 var 内的子数组
QML/Javascript: Adding Self-Referencing Attribute to Subarrays Inside Nested var Matching Some Identifier
我想通过一个名为 "data" 的嵌套 varlist 进行递归,它作为 var
存储在 QML 中。它包含一个名为 "delegates": [ { ... }, ... , { ... } ]
的属性,它为某些委托声明了一些属性。如果这些属性子列表之一包含属性“"data"
我有另一个子级别可以通过该特定委托的操作遍历到。
我想做的是创建一个函数以递归地附加到我的 varlist("data"
子级别),只要检测到与该名称匹配的子级别("data"
) 被检测到。例如,如果 data.delegates[0].data
存在,我想在其后附加相当于 data.delegates[0].data.parentPointer: data
的内容;如果 data.delegates[0].data.delegates[0].data
存在,我想附加 data.delegates[0].data.delegates[0].data.parentPointer: data.delegates[0].data
等价物......
我不是特别关心(计算)成本,因为这是 pragma Singleton
的 Component.onCompleted
中的一次性事件,嵌套最多只有几层。
这更像是一个 Javascript 问题,我相信,因为我相信自动创建自引用指针的方法是通过某种递归 function
调用(这是根据 QML Javascript 中的定义)。我知道如何在 QML 中对 Javascript 中的简单 var
集进行追加操作:
function appendStuff(myVar) {
var temp = myVar
temp.push("stuff")
myVar = temp
}
我知道我可以有条件地签入 Javascript 命名属性 w/in 一个 var
比如:
if (typeof currentLevel.data !== "undefined") {
//do stuff....
}
但是,我有点挂在递归方面——如何重建多级数组——同时正确地跟踪我在原始数组中的位置,直到我的编辑版本完成。我还意识到,当涉及到 "parentPointer"
时,我可能需要我的编辑版本引用自身,这有点棘手。
有什么想法吗?
要将新字段分配给 JS 对象,您只需使用 myjsobject['newprop'] = value
.
所以一个简单的递归函数来创建例如一个双向链表,应该是这样的:
import QtQuick 2.0
import QtQuick.Controls 1.4
ApplicationWindow {
id: root
visible: true
width: 400; height: 450
function foo(depth, ref) {
var a = { value: depth }
if (depth !== 0) {
a['next'] = foo(depth - 1, a)
}
if (ref) a['pred'] = ref
return a
}
property var test: foo(10)
Component.onCompleted: console.log(test.value, test.next.value, test.next.pred.value)
}
我想通过一个名为 "data" 的嵌套 varlist 进行递归,它作为 var
存储在 QML 中。它包含一个名为 "delegates": [ { ... }, ... , { ... } ]
的属性,它为某些委托声明了一些属性。如果这些属性子列表之一包含属性“"data"
我有另一个子级别可以通过该特定委托的操作遍历到。
我想做的是创建一个函数以递归地附加到我的 varlist("data"
子级别),只要检测到与该名称匹配的子级别("data"
) 被检测到。例如,如果 data.delegates[0].data
存在,我想在其后附加相当于 data.delegates[0].data.parentPointer: data
的内容;如果 data.delegates[0].data.delegates[0].data
存在,我想附加 data.delegates[0].data.delegates[0].data.parentPointer: data.delegates[0].data
等价物......
我不是特别关心(计算)成本,因为这是 pragma Singleton
的 Component.onCompleted
中的一次性事件,嵌套最多只有几层。
这更像是一个 Javascript 问题,我相信,因为我相信自动创建自引用指针的方法是通过某种递归 function
调用(这是根据 QML Javascript 中的定义)。我知道如何在 QML 中对 Javascript 中的简单 var
集进行追加操作:
function appendStuff(myVar) {
var temp = myVar
temp.push("stuff")
myVar = temp
}
我知道我可以有条件地签入 Javascript 命名属性 w/in 一个 var
比如:
if (typeof currentLevel.data !== "undefined") {
//do stuff....
}
但是,我有点挂在递归方面——如何重建多级数组——同时正确地跟踪我在原始数组中的位置,直到我的编辑版本完成。我还意识到,当涉及到 "parentPointer"
时,我可能需要我的编辑版本引用自身,这有点棘手。
有什么想法吗?
要将新字段分配给 JS 对象,您只需使用 myjsobject['newprop'] = value
.
所以一个简单的递归函数来创建例如一个双向链表,应该是这样的:
import QtQuick 2.0
import QtQuick.Controls 1.4
ApplicationWindow {
id: root
visible: true
width: 400; height: 450
function foo(depth, ref) {
var a = { value: depth }
if (depth !== 0) {
a['next'] = foo(depth - 1, a)
}
if (ref) a['pred'] = ref
return a
}
property var test: foo(10)
Component.onCompleted: console.log(test.value, test.next.value, test.next.pred.value)
}