我试图在一些深度嵌套结构中的javascript函数内使用QML文件中最顶部组件的属性,但我会收到一个错误,指出属性/变量名未定义。
令人困惑的是,对这个变量的访问在之前的行中是有效的。
以下是QML的一部分:
Page {
id: page
property var modelParam
property var albumNameParam
SilicaGridView {
id: grid
header: PageHeader { title: albumNameParam }
cellWidth: width / 3
cellHeight: width / 3
anchors.fill: parent
model: page.modelParam
delegate: GridItem {
id: gridItem
menu: ContextMenu {
MenuItem {
text: qsTr("Delete" )
onClicked: {
var dialog = pageStack.push(...)
dialog.accepted.connect(function() {
var res = modelParam.deleteSelected(); // works
modelParam.clearSelection(); // gives error
})
}
}
我找到的一个解决方案是:
onClicked: {
var theModel = modelParam
var dialog = pageStack.push(...)
dialog.accepted.connect(function() {
var res = theModel.deleteSelected(); // works
theModel.clearSelection(); // works
})
}
在这种情况下,变量可能会在JS闭包中被捕获,因此可以在回调函数中使用。
然而,我不明白第一个例子是如何工作的
部分
? 在这种情况下,正确的方法是什么?