1

Windows 8 html/java-script メトロ アプリを開発しています。ユーザーが最初にアプリケーションを起動すると、ユーザーが自分のユーザー名を入力できるテキスト ボックスを含むウェルカム ページが表示されます。ユーザーがボタンを押すと、ユーザー名が保存され、リダイレクトが行われます。このコードは正常に動作します...

var appData = Windows.Storage.ApplicationData.current;
button.onclick = function (e) {
    var input = document.querySelector(".welcome #userName").value;
    if(input != null && input != "") {
         appData.roamingSettings.values["userName"] = input;
          WinJS.Navigation.navigate("/pages/items/items.html");
    }
}

ユーザーがアプリケーションに 2 回目に入るときに、ユーザーからのアクションなしで、スタート ページからコンテンツ ページへのリダイレクトが発生するようにします。 "、ボタンの onclick 関数と同じ WinJS 呼び出しを試みます。

if (appData.roamingSettings.values.hasKey("userName")) {
   WinJS.Navigation.navigate("/pages/items/items.html");
}

問題は、今回はリダイレクトが行われず、アプリケーションが失敗することです..(roamingSettingsには正しい情報が含まれているため、リダイレクトが問題です).コードはready関数内に配置されています.

WinJS.UI.Pages.define("/pages/welcome/welcome.html", {
   ready: function (element, options) {
})();

私の質問は、WinJS.Navigation を使用してあるページから別のページへの条件付きリダイレクトを実行する正しい方法と、私のコードの問題は何ですか?

4

1 に答える 1

0

default.js でナビゲーションを実行すると (@Gotdibbs の提案に従って) 動作するはずです。アクティブ化されたハンドラーのコードは、関数の終わりに向かって次のようになります。

args.setPromise(WinJS.UI.processAll().then(function () {
    // if app was suspended while on a page, go there
    // else ...
    if (nav.location) {
        nav.history.current.initialPlaceholder = true;
        return nav.navigate(nav.location, nav.state);
    }
    else if (appData.roamingSettings.values.hasKey("userName")) {
        WinJS.Navigation.navigate("/pages/items/items.html");
    }
    else {
        return nav.navigate(Application.navigator.home);
    }
}));
于 2013-04-20T03:31:50.563 に答える