Zasadniczo mam zwykły ListView:Jak uzyskać dostęp do zmapowanych danych delegowanych przez ListView w ListModel w QML?
Rectangle {
id: mylist
ListModel {
id: mylistModel
ListElement {
text: "blah1"
}
ListElement {
text: "blah2"
}
ListElement {
text: "blah3"
}
}
Component {
id: mylistDelegate
Text {
id: mylistDelegateText
text: text
property bool mylistDelegateTextEnabled: false
}
}
ListView {
id: mylistView
model: mylistModel
delegate: mylistDelegate
}
}
zignoruj żadnych problemów mógłbym wprowadzanych przez obcinanie kod, aby skupić się na tym, co ważne.
W każdym razie, teraz moim problemem jest to, że chcę uzyskać dostęp do przypisanego delegata ListElement i zobaczyć, jaka jest wartość mylistDelegateTextEnabled w pętli javascript. Na przykład pętla iteruje nad bieżącą listą i podaje mi tekst ListElementów w modelu:
for(var i = 0; i < mylistModel.count; ++i) {
console.log(mylistModel.get(i).text);
}
To oczywiście działa dobrze.
Teraz to, co chcę jest zasadniczo to:
for(var i = 0; i < mylistModel.count; ++i) {
console.log(mylistModel.get(i).text);
console.log(mylistModel.get(i).delegate.mylistDelegateTextEnabled);
}
Niestety, to nie wydaje się być takie proste.
Pomoc doceniona.
Dzięki za odpowiedź! Próbowałem tego i otrzymałem błąd: Nie można przypisać do właściwości tylko do odczytu "textEnabled". Tak, chciałbym wykonać przypisanie z QML zamiast z JS. Czy mogę to zrobić? – Svenstaro
Myślę, że z powodu błędu próbujesz ustawić flagę 'textEnabled' z poziomu delegata, który nie będzie działał. Zamiast tego zaktualizuj model bezpośrednio, używając 'model.setProperty()'. Zaktualizuję moją odpowiedź, aby zademonstrować to w ten sposób, zamiast używać "Component.onCompleted". –
To idealne, dzięki. – Svenstaro