Передача состояния между экранами в приложении Symbian / QML - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь использовать Loader для загрузки полноэкранных компонентов для смены экранов в проекте Symbian / QML.Это не похоже на правильный способ сделать это, поэтому я, вероятно, упускаю что-то очевидное.

В качестве примера я буду использовать кнопку на одном экране, которая должна открывать полноэкранный WebView (он же ChildBrowser).).Я хотел бы сделать ChildBrowser повторно используемым компонентом, поэтому необходимо передать ему URL-адрес.

Я пытался создать файл Javascript с 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 предполагаемый способ построения и перехода между экранами?
  • Как выпередавать параметры между экранами?
  • как вы поддерживаете состояние в течение всего времени жизни приложения?Я особенно заинтересован в создании контроллеров и моделей в Javascript.

Я уверен, что это вопросы новичка, поэтому, вероятно, необходим набор ссылок на соответствующую документацию;Я подозреваю, что нет однако.

1 Ответ

1 голос
/ 01 февраля 2011

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
}

ДобавлениеСвойство url для вашего ChildBrowser - это просто вопрос наличия свойства корневого элемента, например

Rectangle {
    property alias url: webview.url

    WebView {
        id: webview
    }
}
...