以下是代码的一部分:
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;
}
}
}
}
答案 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]()
}
}
}