Układanka zakresu komponentu QML
Weź ten kod:
import QtQuick 1.1
Rectangle {
width: 100
height: 100
property color fromColor: "red"
property color toColor: "blue"
gradient: Gradient {
property color fromColor: "yellow"
property color toColor: "green"
GradientStop { position: 0; color: fromColor }
GradientStop { position: 1; color: toColor }
}
}
Dlaczego dokładnieGradient
wybierz jegofromColor
itoColor
właściwości z otaczającego elementu?
Gdzie jest to udokumentowane (przynajmniej w komentarzach do kodu źródłowego, lepiej w oficjalnych dokumentach)?
Uwaga: ten „przykład zaciemniania QML pochodzi z wykładu Girisha RamakrishnanaQt Szybkie najlepsze praktyki i wzorce projektowe (przewijanie do 25 minuty), gdzie mówi, że rzecz jest niezwykle skomplikowana i musi mieć zakres komponentów i tak dalej, ale nie ma czasu, aby wyjaśnić dlaczego.
[AKTUALIZACJA]
Tak więc, jak mówi MartinJ poniżej, komponent najwyższego poziomu w hierarchii właściwości elementu (nie tylko elementu-dziecka) ma swoje właściwości widoczne dla wszystkich właściwości, jednak głęboko zagnieżdżonych, z pierwszeństwem właściwości tego obiektu i wszystkich właściwości „pośrednie” przedmioty nie są w ogóle widoczne.
Oto mały przykład:
import QtQuick 1.1
Item {
Item {
property string s: "parent-str"
Item { Component.onCompleted: console.log(s) }
}
}
To daje:"ReferenceError: Can't find variable: s"
A to działa zgodnie z oczekiwaniami:
import QtQuick 1.1
Item {
property string s: "parent-str"
Item { Component.onCompleted: console.log(s) }
}
, wyjście"parent-str"
.
Zobacz komentarze MartinJ poniżej.