如何从外部范围动态地将元素附加到 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) }
    }
}