如何从外部范围动态地将元素附加到 ListModel
How to dynamically append elements to ListModel from exterior scope
假设我有 Component
Component {
id: myComp1
Item {
id: item
ListView {
id: listView
model : ListModel { id: listModel }
delegate : RowLayout { /* display model data*/ }
Component.onCompleted {
// get data from server ...
model.append(dataFromServer)
}
}
}
}
然后我有第二个 Component
,这是堆栈中的另一个页面,我想用这个组件来更新 mycomp1
,即:
Component {
id: myComp2
Button {
onClicked: {
myComp1.item.listView.listModel.append(someNewData) // want to be able to do this
}
}
}
并且这些组件在 StackView
中捆绑在一起
现在,这似乎不起作用,因为 myComp2
似乎无法访问必要的范围来更新 myComp1
的模型。有什么解决办法吗?
感谢您的帮助。
问题是 Component
就像一个类型声明。它没有定义对象的实例,因此您无法访问其成员。
您可以将 ListModel 拉到 Component
之外,以便两个组件都可以访问它。
ListModel {
id: listModel
}
Component {
id: comp1
ListView { model: listModel }
}
Component {
id: comp2
Button {
onClicked: { listModel.append(someNewData) }
}
}
假设我有 Component
Component {
id: myComp1
Item {
id: item
ListView {
id: listView
model : ListModel { id: listModel }
delegate : RowLayout { /* display model data*/ }
Component.onCompleted {
// get data from server ...
model.append(dataFromServer)
}
}
}
}
然后我有第二个 Component
,这是堆栈中的另一个页面,我想用这个组件来更新 mycomp1
,即:
Component {
id: myComp2
Button {
onClicked: {
myComp1.item.listView.listModel.append(someNewData) // want to be able to do this
}
}
}
并且这些组件在 StackView
现在,这似乎不起作用,因为 myComp2
似乎无法访问必要的范围来更新 myComp1
的模型。有什么解决办法吗?
感谢您的帮助。
问题是 Component
就像一个类型声明。它没有定义对象的实例,因此您无法访问其成员。
您可以将 ListModel 拉到 Component
之外,以便两个组件都可以访问它。
ListModel {
id: listModel
}
Component {
id: comp1
ListView { model: listModel }
}
Component {
id: comp2
Button {
onClicked: { listModel.append(someNewData) }
}
}