2011-01-31 15 views
0

Loaderを使用して、フルスクリーンコンポーネントをSymbian/QMLプロジェクトの変更画面に読み込もうとしています。これはそれを行う正しい方法のように感じていないので、私はおそらく明らかに何かが不足しています。Symbian/QMLアプリケーションでの画面間の受け渡し

私が使用する例は、フルスクリーンのWebView(a.k.a ChildBrowser)を開く必要がある1つの画面上のボタンです。 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は、「URL」性質を持っている、あなたはこのような何かをしたと仮定すると

Rectangle { 
    property alias url: webview.url 

    WebView { 
     id: webview 
    } 
} 
+0

ローダーは依然としてコールサイトにボイラープレートを持っていなければなりません。それにもかかわらず、これは私にいくつかのアイデアを与えます。ありがとう。 – jamesh

+0

ロードされたqmlファイルがネットワーク経由でアクセスされないことがわかっている場合は、ここでショートカットをとることができます。 qmlファイルがローカルファイルシステムまたはリソースファイルから取得された場合、ローダーソースの設定は同期します。この前提で、プロパティをローダ、onLoadedハンドラ、else ifに保存できます。 – eburger

関連する問題