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.

questionAnswers(2)

yourAnswerToTheQuestion