QtQuick Item.children.indexOf()不存在?

时间:2017-03-26 15:06:02

标签: javascript arrays qml qtquick2

显然,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数组更好的解决方案?

2 个答案:

答案 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数组更好的解决方案?

没有