我正在尝试使用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
预期的方式在屏幕之间构建和转换?我确定这些是新手问题,因此可能只需要一系列指向相关文档的链接;我怀疑不是。
答案 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
}
}