【发布时间】:2014-07-10 22:59:22
【问题描述】:
我正在尝试确定 QML 中函数范围的细节。文档中的示例似乎经常不正确(或不完整)。我将从JavaScript Host Environment doc page 中举一个非常典型的例子。我正在使用 Qt 5.3。
Item {
width: 200; height: 100
function mouseAreaClicked(area) {
console.log("Clicked in area at: " + area.x + ", " + area.y);
}
// This will not work because this is undefined
MouseArea {
height: 50; width: 200
onClicked: mouseAreaClicked(this)
}
// This will pass area2 to the function
MouseArea {
id: area2
y: 50; height: 50; width: 200
onClicked: mouseAreaClicked(area2)
}
}
如果我把它粘贴到根 ApplicationWindow 对象内的一个新的空项目中,它就不起作用。我见过很多这样的例子,它们的行为都是一样的。对函数 mouseAreaClicked() 的调用会生成一个引用错误。我可以将函数向上移动,使其直接位于根对象内,或者我可以分配一个 id 并通过 id 调用该函数。
这是应该如何工作的?只有当它们是根对象的一部分时,函数才可用?这是最近发生的变化吗?它与 ApplicationWindow 对象有关吗?我在文档中找不到任何提及。这个例子也有点有趣,因为正在讨论的主题:this 指针的行为与描述的不同。第一个 MouseArea 调用的代码与第二个 MouseArea 调用的代码一样工作,所以我也不知道该怎么做。
任何见解都值得赞赏。
【问题讨论】:
标签: javascript qt qt-quick