调用 PageStack 中上一个 Page 中的 python 函数

Call to a python function in the previous Page in the PageStack

我有 2 个 QML Silica 页面,Main.qml 和 Icon.qml。
Main.qml 有这样的分布:

import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3

Page {
    SilicaFlickable {
        id: mainList
        
        Button {
            text: "Stack the next page"
            onClicked: { // Stack de Icon Page
                pageStack.push(Qt.resolvedUrl("Icon.qml"))
            }
        }
        function reload(){ }
        Python {
           id: py
           Component.onCompleted: { mainList.reload() }
        }
    }
}

我想调用函数 reload() 因为 Icon:

import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3

Page {
    id: iconEditor

    Button {
        onClicked: {
            pageStack.pop()
            pageStack.completeAnimation()
            pageStack.currentPage.mainList.reload() // Fail
        }
    }
}

Main.qml 页面在主要 QML 文件中堆叠如下:

import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3

ApplicationWindow {
    id: root
    Python {
        Component.onCompleted: {
            pageStack.push(Qt.resolvedUrl("Main.qml"))
        }
    }
}

如何调用堆栈上一页的函数?

“id”只有定义它的 .qml 作为范围,不能(或应该在该范围之外使用)。如果你想公开对象或变量,那么你必须通过在文件的顶层创建一个 属性 来实现。

在这种情况下,解决方案是使用 alias property:

import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3

Page {
    property alias mainList: mainList

    SilicaFlickable {
        id: mainList
        // ...