代码之家  ›  专栏  ›  技术社区  ›  user826955

QML变量范围问题

  •  0
  • user826955  · 技术社区  · 3 年前

    我试图在一些深度嵌套结构中的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闭包中被捕获,因此可以在回调函数中使用。

    然而,我不明白第一个例子是如何工作的 部分 ? 在这种情况下,正确的方法是什么?

    0 回复  |  直到 3 年前
        1
  •  0
  •   Adrian Mole Khaled Ali    2 年前

    尝试:

    page.modelParam.clearSelection();