2011-01-31 93 views
0

我正尝试使用Loader将全屏组件加载到Symbian/QML项目中更改屏幕。这不像是正确的做法,所以我可能会错过某些明显的东西。在Symbian/QML应用程序中屏幕之间传递状态

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

我试图建立一个JavaScript文件与pragma library

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

为了更好的标题想,我们称这种​​。

屏幕按住按钮:

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

加载程序是一种避免在需要它们之前创建项目的好方法。

假设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简直就是根项目有产权的问题,例如

Rectangle { 
    property alias url: webview.url 

    WebView { 
     id: webview 
    } 
} 
+0

该装载机仍然必须在呼叫现场有一些锅炉板。尽管如此,这给了我几个想法。谢谢。 – jamesh 2011-02-02 17:15:02

相关问题