在Symbian / QML应用程序中的屏幕之间传递状态

时间:2011-01-31 11:00:30

标签: qt4 symbian maemo qml

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

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

我尝试使用pragma library构建一个Javascript文件:

.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构建控制器和模型特别感兴趣。

我确定这些是新手问题,因此可能只需要一系列指向相关文档的链接;我怀疑不是

1 个答案:

答案 0 :(得分: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
}

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

Rectangle {
    property alias url: webview.url

    WebView {
        id: webview
    }
}