【发布时间】:2012-07-05 07:33:19
【问题描述】:
获取此代码:
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 }
}
}
为什么Gradient 会从封闭元素中选择其fromColor 和toColor 属性?
这在哪里记录(至少在源代码 cmets 中,在官方文档中更好)?
注意:这个“QML 混淆示例来自 Girish Ramakrishnan 的演讲 Qt Quick Best Practices and Design Patterns(倒退到第 25 分钟),他确实说事情非常复杂,并且与组件范围有关,但是有没时间解释原因。
[更新]
因此,正如 MartinJ 在下面所说,元素属性(不仅是元素子)层次结构中的顶级组件的属性对所有属性可见,无论嵌套多么深,优先级是该属性的属性,并且根本看不到“中间”项目的所有属性。
这是一个小例子:
import QtQuick 1.1
Item {
Item {
property string s: "parent-str"
Item { Component.onCompleted: console.log(s) }
}
}
这给出:"ReferenceError: Can't find variable: s"
这按预期工作:
import QtQuick 1.1
Item {
property string s: "parent-str"
Item { Component.onCompleted: console.log(s) }
}
,输出"parent-str"。
请参阅下方 MartinJ 的 cmets。
【问题讨论】:
-
“如果你有兴趣知道为什么会这样……在谈话结束后随时找我。” (Girish Ramakrishnan 在那次谈话中)。好吧,老鼠。
-
@Slavik81 好吧,仅仅指出这个话题就很有帮助,至少。此外,我们可以随时给他发邮件——如果他没有忘记相关细节的话:)
-
@Slavik81 有点明白了,马丁回答说,我用一个(我希望)澄清的例子更新了我的问题。
标签: scope obfuscation qml