在GridView中访问委托的功能

时间:2018-07-18 11:22:46

标签: qml

我有一个使用DelegateModel作为其模型的GridView:

GridView{
    function test(idx) {
       model.items.get(idx).testFunction()
    }
    model: DelegateModel{
        id: visualModel
        model: myModel
        delegate: myItem {}
    }
}

如果知道委托的索引,如何调用委托的函数或设置委托的属性?

例如如果我尝试调用函数test,则会收到错误消息

TypeError: Property 'testFunction' of object [object Object] is not a function

我不明白。这是我的代表的顶端

Item {
  id: delegateRoot
  function testFunction() {
    console.log("success")
  }

model.items.get(idx)行错了吗?另外,如何检查/调试是否确实给了我代表?

1 个答案:

答案 0 :(得分:1)

您正在模型上调用该函数。但是它在视图的委托中,因此找不到。

临时我不知道如何从视图中获取委托的解决方案。这里的问题是,可能是在您尝试调用该委托时尚未创建该委托。

对于Repeater,您可以轻松地调用itemAt(index)来获取它-因为Repeater总是实例化模型中所有内容的委托。

您很可能希望重构,因此该函数不再是委托的成员,而仅通过获取模型数据(您可以通过get从模型中检索该数据)来工作并操纵委托通过模型中的角色。

您可以例如扮演“触发器”角色。将委托连接到已更改信号的委托中,并在需要调用函数时递增模型中触发的信号。