Nimm diesen Code:
%Vor% Warum wählt das Gradient
seine Eigenschaften fromColor
und toColor
aus dem einschließenden Element?
Wo ist das dokumentiert (zumindest innerhalb von Quellcode-Kommentaren, besser in den offiziellen Dokumenten)?
Hinweis: Dieses "QML-Verschleierungsbeispiel stammt von Girish Ramakrishnans Vortrag Qt Quick Best Practices und Design Patterns (zurück zur 25. Minute), wo er sagt, dass das Ding extrem kompliziert ist und mit Komponentenumfang und ähnlichem zu tun hat, aber keine Zeit hat, warum zu erklären.
[UPDATE]
Wie MartinJ unten erklärt, hat die oberste Komponente in der Hierarchie element -Eigenschaft (nicht nur element-child) ihre Eigenschaften für alle Eigenschaften sichtbar, jedoch tief geschachtelt, wobei die Eigenschaften dieser Eigenschaften Vorrang haben und Alle Eigenschaften von "Zwischen" -Elementen werden überhaupt nicht angezeigt.
Hier ist ein kleines Beispiel:
%Vor% Dies ergibt: "ReferenceError: Can't find variable: s"
Und das funktioniert wie erwartet:
%Vor%, Ausgabe von "parent-str"
.
Bitte lesen Sie die Kommentare von MartinJ unten.
Das sieht auf den ersten Blick nicht intuitiv aus, aber geben Sie im Komponentenstammelement fromColor
und toColor
aus und der Grund wird offensichtlich. Aus den QML-Scope-Dokumenten können Sie entnehmen, dass der Bereich Folgendes umfasst:
id
sind in der Komponente definiert. A GradientStop {}
im obigen Beispiel hat keine lokalen Eigenschaften definiert. Die Root-Komponente tut dies und sie sind die Eigenschaften, für die fromColor
und toColor
aufgelöst werden müssen. Die Eigenschaften in Gradient {}
liegen nicht im Bereich von GradientStop {}
.
Siehe auch:
%Vor%Dieser Code gibt aus:
%Vor%Beachten Sie, dass jedoch (für die Children-Eigenschaft oder nicht) und was auch immer (ein Element oder JavaScript-Code-Snippet) wir binden, die "middle" -Eigenschaft nie gefunden wird.
Der Name lautet also:
Wenn eine Eigenschaft innerhalb der Komponente referenziert wird, aber nicht in ihr definiert ist, kann sie dennoch innerhalb der "customized" -Komponente eingeführt und gesehen werden:
%Vor%.
%Vor%Das Ausführen von "OverrideOuter.qml" erzeugt:
%Vor%Siehe auch Martins Kommentare und die Dokumente, um die Angelegenheit zu klären. Die relevanten Dokumente sind:
Tags und Links scope qml obfuscation