2011-01-31 7 views
0

Loader을 사용하여 전체 화면 구성 요소를 Symbian/QML 프로젝트의 화면 변경에로드하려고합니다. 이것은 올바른 방법으로 생각하지 않습니다. 그래서 나는 명백한 것이 빠져있을 것입니다.Symbian/QML 앱의 화면 간 상태 전달

예를 들어 전체 화면 WebView (a.k.A ChildBrowser)를 열어야하는 버튼이 한 화면에 사용됩니다. ChildBrowser를 재사용 가능한 구성 요소로 만들고 싶습니다. URL을 전달해야합니다. 나는 pragma library와 자바 스크립트 파일을 작성하려고했습니다

는 : 더 나은 제목의 결핍

.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 의도 구축 방법 및 전환을 사용?
  • 화면간에 매개 변수를 전달하는 방법은 무엇입니까?
  • 앱 평생 동안 상태를 어떻게 유지합니까? 나는 특히 컨트롤러와 모델을 자바 스크립트로 만드는 것에 관심이있다.

나는 이들이 초보자 용 질문이므로, 관련 문서에 대한 링크가 필요할 것만 같습니다. 그러나 은 아니지만입니다.

답변

1

로더는 필요할 때까지 항목을 만드는 것을 피하는 좋은 방법입니다. 루트 항목에 특성을 갖는의 문제는 단순히 예를

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"속성을 추가 :

는 ChildBrowser는 "URL"속성을 가지고 가정, 당신이 뭔가를 할 수 있습니다

Rectangle { 
    property alias url: webview.url 

    WebView { 
     id: webview 
    } 
} 
+0

로더에는 통화 사이트에 약간의 보일러 플레이트가 있어야합니다. 그럼에도 불구하고 이것은 두 가지 아이디어를 제공합니다. 감사. – jamesh

+0

로드 된 qml 파일이 네트워크를 통해 액세스되지 않는다는 것을 알고 있다면 여기에 바로 가기를 걸릴 수 있습니다. qml 파일이 로컬 파일 시스템 또는 자원 파일에서 오는 경우, 로더 소스 설정은 동 기적입니다. 이 가정하에 로더, onLoaded 핸들러 및 else if의 등록 정보를 저장할 수 있습니다. – eburger