2017-03-26 21 views
1

Anscheinend children Eigenschaft, die dokumentiert wird, um eine list<Item> zu sein, hat nicht das Javascript eingebaut indexOf(element). Der folgende Code:QtQuick Item.children.indexOf() existiert nicht?

Item{ 
    id: exampleParent 
    Item{ id: exampleChild } 
} 

Button{ 
    text: "Get index" 
    onClicked: console.log(exampleParent.children.indexOf(exampleChild)) 
} 

einen TypeError: Property 'indexOf' of object [object Object] is not a function Fehler werfen.

Warum ist das der Fall, gibt es einen bestimmten Grund? Gibt es eine bessere Lösung als das Array children manuell zu durchlaufen?

Antwort

2

Warum ist das der Fall, gibt es einen bestimmten Grund?

Die documentation for QML's list type sagt:

Ein Listenwert kann in ähnlicher Weise zu einem JavaScript-Array zugegriffen werden:

  • Werte werden mit der [] eckigen Klammer zugeordnet Syntax mit comma -separierte Werte
  • Die Eigenschaft length gibt die Anzahl der Elemente in der Liste
  • an
  • Werte in der Liste werden mit dem [index] Syntax zugegriffen

Es werden nicht alle der API, die Sie in einem JavaScript-Array finden würde.

Das C++ - Gegenstück ist dokumentiert here.

Gibt es eine bessere Lösung als das children Array manuell zu durchlaufen?

Nr

4

Mitch gab eine gute Erklärung, warum Sie nicht direkt indexOf nennen kann, aber es gibt einen Weg, es indirekt zu tun.

Row { 
    Item{ 
     id: exampleParent 
     Item{} 
     Item{ id: exampleChild } 
    } 

    Button{ 
     text: "Get index" 
     onClicked: console.log(Array.prototype.indexOf.call(exampleParent.children, exampleChild)) 
    } 
} 
+0

Ha, cool: Sie können call auf Array.prototype.indexOf() nutzen! Ich wusste nicht, dass das möglich ist. – Mitch

Verwandte Themen