2017-07-09 3 views
1

Hier ist mein Code, und es funktioniert!QML - Erstellen Sie ListModel dynamisch (JAVASCRIPT-Problem)

ListModel { 
    id: idValueList 

    Component.onCompleted: { 

     for (var i = 0; i < 21; i++) { 
      append(createListElement(i)); 
     } 
    } 

    function createListElement(id) { 
     return { 
      myId: id + 1, myValue: "" 
     }; 
    } 
} 

Ich brauche aber mit myXmlListModel.get(myXmlListModel.count - 1).myValue, die „21“ in der for-Schleife zu ersetzen, die von einem XmlListModel kommt, arbeitet die dynamische Liste Modell Stop!

Das lustige daran ist, dass die Code-

Text{ 
    x:0 ; y:0 
    text: myXmlListModel.get(myXmlListModel.count - 1).myValue; 
} 

Drucke für mich genau ein 21 Aber wenn ich den Ausdruck myXmlListModel.get(myXmlListModel.count - 1).myValue in der for-Schleife verwenden, nichts funktioniert.

Wie kann es möglich sein ??

Antwort

0

sollte Der Grund ganz einfach zu verstehen sein:

Component.onCompleted: [...] 

an einem ganz bestimmten Zeitpunkt ausgeführt wird, wenn die Komponente beendet ist. Dies ist nicht unbedingt der Zeitpunkt, zu dem der Inhalt des myXmlListModel zur Verfügung steht. Möglicherweise ist es bereits erstellt, aber möglicherweise noch leer. Deshalb, wenn

Component.onCompleted: [...] 

Ihrer ListModel ausgeführt wird, ist die myXmlListModel.count in der Tat noch 0, während auf 21 Ändern direkt nach - so zu der Zeit Sie die Text lesen es bereits die richtige Menge hat.

Der Zeitpunkt, wo Sie Ihre ListModel füllen sollte, ist daher nicht, wenn es abgeschlossen ist, aber sobald der Inhalt ist bereit, so dass Sie handhaben könnten:

myXmlListModel.onCompleted 

und

myXmlListModel.onCountChanged 

(für Letzteres sollten Sie überlegen, clear() auf Ihrem ListModel zuerst)

+0

Vielen Dank! @derM – Elena

Verwandte Themen