如何存储函数并稍后在QML JavaScript

时间:2017-04-03 02:10:00

标签: qt qml

以下是代码的一部分:

Repeater{
    model: [["Text A", function(){console.log("hello A")}],
            ["Text B", function(){console.log("hello B")}],
            ["Text C", function(){console.log("hello C")}],
            ["Text D", function(){console.log("hello D")}]]
    delegate: Button{
        text: modelData[0]
        onClicked: modelData[1](); // Type Error
    }
}

我想为每个按钮提供不同的行为。我认为它应该与原生JavaScript相同。

var func = function(){
  //...
}
func();

如何在QML JavaScript中执行此操作?

顺便说一句,现在我的解决方案是:

Repeater{
    model: ["Text A",
            "Text B",
            "Text C",
            "Text D"]
    delegate: Button{
        text: modelData
        onClicked: {
           switch(index)
           {
              cast 0:
                console.log("hello A")
                break;
              cast 1:
                console.log("hello B")
                break;
              cast 2:
                console.log("hello C")
                break;
              cast 3:
                console.log("hello D")
                break;
           }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

这看起来像是一个bug,它只是不会通过模型界面获得该功能。或者可能是设计限制。就函数而言,它是undefined

你可以这样解决:

  property var mod :
   [["Text A", function(){console.log("hello A")}],
    ["Text B", function(){console.log("hello B")}],
    ["Text C", function(){console.log("hello C")}],
    ["Text D", function(){console.log("hello D")}]]

  Column {
    Repeater {
      id: rep
      model: mod
      delegate: Button {
        text: modelData[0]
        onClicked: mod[index][1]()
      }
    }
  }