显然,children
属性(记录为list<Item>
)没有内置的Javascript indexOf(element)
。以下代码:
Item{
id: exampleParent
Item{ id: exampleChild }
}
Button{
text: "Get index"
onClicked: console.log(exampleParent.children.indexOf(exampleChild))
}
会抛出TypeError: Property 'indexOf' of object [object Object] is not a function
错误。
为什么会这样,有什么具体原因吗?有没有比手动遍历children
数组更好的解决方案?
答案 0 :(得分:5)
Mitch给出了一个很好的解释,说明为什么你不能直接调用indexOf
,但有一种方法可以间接地做到。您可以在call
上使用Array.prototype.indexOf()
:
Row {
Item{
id: exampleParent
Item{}
Item{ id: exampleChild }
}
Button{
text: "Get index"
onClicked: console.log(Array.prototype.indexOf.call(exampleParent.children, exampleChild))
}
}
答案 1 :(得分:2)
为什么会这样,有什么具体原因吗?
documentation for QML's list type说:
可以通过与JavaScript数组类似的方式访问列表值:
- 使用[]方括号语法分配值 逗号分隔值
- length属性提供的数量 列表中的项目
- 使用[index]访问列表中的值 语法
它不提供您在JavaScript数组中找到的所有API。
C ++对应文件记录在here。
有没有比手动遍历
children
数组更好的解决方案?
没有