0

我正在尝试使用 aLoader来加载全屏组件以更改 Symbian/QML 项目中的屏幕。这感觉不是正确的方法,所以我可能遗漏了一些明显的东西。

我将使用的示例是一个屏幕上的一个按钮,它应该打开一个全屏 WebView(又名 ChildBrowser)。我想让 ChildBrowser 成为可重用的组件,因此需要将 URL 传递给它。

我尝试使用以下内容构建 Javascript 文件pragma library

.pragma library
var map = {};
function put(key, value) {
      map[key] = value;
}
function get(key) {
      return map[key];
}

为了更好的标题,我们称之为intent.js

按住按钮的屏幕:

import "intent.js" as Intent

Button {
    onButtonClicked: {
        Intent.put("url", "http://example.com");
        console.log("Going to " + Intent.get("url"));
    }
}

稍后,在 中ChildBrowser.qml,我正在导入“intent.js”,然后获取 Intent.get(“url”)。这是undefined.

我的问题是:

  • 是否使用Loader预期的方式在屏幕之间构建和转换?
  • 你如何在屏幕之间传递参数?
  • 您如何在应用程序的整个生命周期内维护状态?我对用 Javascript 构建控制器和模型特别感兴趣。

我确定这些都是新手问题,因此可能只需要一组相关文档的链接;然而我怀疑不是

4

1 回答 1

1

Loader 是避免在需要之前创建项目的好方法。

假设 ChildBrowser 有一个“url”属性,你可以这样做:

Button {
    onButtonClicked: browser.load("http://example.com")
}
Loader {
    id: browser
    property string url
    function load(u) {
        url = u
        if (status == Loader.Null)
            source = "ChildBrowser.qml"
        else if (status == Loader.Ready)
            item.url = url
    }
    onLoaded: item.url = url
}

将“url”属性添加到您的 ChildBrowser 只是在根项目上具有属性的问题,例如

Rectangle {
    property alias url: webview.url

    WebView {
        id: webview
    }
}
于 2011-02-01T01:59:06.520 回答