假设我创建了一个标识为foo
的对象。名称foo
可见对象多远?当前文件中到处都是?目前的目录中到处都是?或者是什么?
我在scope上阅读了QML文档,但我没有在那里找到相关信息。
答案 0 :(得分:1)
我在id attribute documentation找到了答案。
它说:
对象可以通过其
id
从组件范围中的任何位置引用。
和"组件范围"在the scope documentation page
中定义答案 1 :(得分:1)
使用id
来引用单一来源中的对象是完美的,花花公子,但故事还有更多内容。 id
也将解析对象树:
ApplicationWindow {
id: main
visible: true
width: 600
height: 300
property int test: 667
Obj { }
}
// Obj.qml
Item {
Obj2 {}
}
// Obj2.qml
QtObject {
Component.onCompleted: console.log(main.test)
}
正如此示例所示,main
id
来自在Obj2
中创建的Obj
中main.qml
创建的id
。在这方面,id非常类似于动态范围属性,有一个值得注意的例外,动态范围属性只有在特定源的根对象中声明时才有效,而someObject.someDynamicScopeProperty
无论哪个对象都会解析它被声明,只要它在那个源中,当然,只要它没有被遮蔽。我猜在内部他们最终会转移到根对象,因为它们成为该组件的属性。通用逻辑规定查找性能类似于动态属性。为了进一步强化与动态范围属性的相似性,两者都不可能链接,只能从特定的qml文件中解析。即使someObject.someId
内的属性和id
都可以解析,您也不能SomeObject
就像id
一样{。}}。
这实际上比最初看起来更有用。它将允许沿着已知的树分支引用对象,而无需返回并仔细地接口属性或别名,以便公开分支结构以进行查找。这也是为id: root
使用有意义且唯一的标识符的一个很好的理由,而不是使用[{"Consecutive":11,"Code":"E5ZQHZ","Cvv":"GNH","IdCoupon":77236},{"Consecutive":12,"Code":"WM96FY","Cvv":"NGE","IdCoupon":77237}]
作为每个qml文件的根对象。