我有一个listview,我想使用defaultDelegate或customDelegate,具体取决于属性的值 . 到目前为止,我已尝试使用组件加载不同的委托:
Component{
id: delegate
Loader {
sourceComponent: type == 3 ? customDelegate : defaultDelegate
}
}
但是,我无法从我的两位代表那里访问我的模型中的属性 . 我有以下错误:
ReferenceError: name is not defined
这是我使用的模型:
ListModel {
id: test
ListElement {
name: "Bill"
team: "554"
type: 2
}
ListElement {
name: "John"
team: "555"
type: 3
}
ListElement {
name: "Sam"
team: "556"
type: 1
}
}
有谁有任何想法,我在这里做错了什么?
1 回答
当然,这是一个背景问题 . 在您的代码中,由
ListView
插入到delegate
的上下文中的name
,team
和type
上下文属性对于委托中的组件是不可访问的,因为Loader
在实例化它们时使用customDelegate
和defaultDelegate
的创建上下文作为父上下文,并且name
,team
和type
不引用具有该上下文链的任何内容 . 一种解决方案是将所需信息显式设置为Loader
的属性(这是有效的,因为Loader
将自身设置为正在加载的组件的上下文对象) .下面是一个工作示例:
为了进一步阅读和改进,我强烈建议您阅读this .