2011-01-31 94 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

相關問題