QML Loader:设置 "source:" 属性 一次且仅一次

QML Loader: set "source:" property once and only once

大家早上好,

我必须维护一个现有的 QML 应用程序(我无法完全重写),我们需要延迟大部分页面的加载,这样应用程序的启动会更快。

即:我需要加载一个页面,一次且仅一次,在某个时候我需要在之后保持加载(我有足够的 RAM)。

所以,我想我可以这样写:

Loader {
    id: _userInfoLoader;
    source: (status != Loader.NULL || Global.currMenuId == MenuIds.SETTINGS) ? "pages/PageUserInfo.qml" : "" ;
    }

此代码用于在“设置”页面打开时加载“用户信息”页面(即当模型变量 Global.currMenuId == SETTINGS 时)

(注意:“用户信息”页面是“设置”页面的子页面,因此在显示“父页面”时加载它就足够了)。

加载此页面“用户信息”后,其状态将不再为 Null,而是“就绪”、“正在加载”或“错误”,因此“来源:”属性 应该一旦设置就不再更改。

这样做,我得到了可怕的错误:

QML Loader: Binding loop detected for property "source"

你知道怎么解决吗?预先感谢您的想法...

我认为循环是 Global.currMenuId == MenuIds.SETTINGS 为真 -> source 已设置 -> status 已更新 -> source 已再次设置 -> status 再次更新 -> source 再次设置 ....

如果你想让它只做一次,你可以使用Connections和程序代码:

Loader {
    id: _userInfoLoader;
    Connections {
        target: Global
        onCurrMenuIdChange: {
            if (!_userInfoLoader.source && Global.currMenuId == MenuIds.SETTINGS) {
              _userInfoLoader.source = "pages/PageUserInfo.qml";
            }
        }
    }
}