如何使用WinJS.Navigation根据应用程序漫游设置重定向用户



我正在开发一个Windows 8 html/java-script metro应用程序。当用户第一次启动应用程序时,将显示一个欢迎页面,其中包含一个文本框,用户可以在其中输入他/她的用户名。当用户按下按钮时,将保存用户名并进行重定向。这段代码运行良好…

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");
    }
}

用户第二次进入应用程序时,我希望从起始页重定向到内容页,而不需要用户的任何操作…所以我看看roamingSettings,如果它包含键"userName",我尝试在按钮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从一个页面到另一个页面进行条件重定向的正确方法是什么?导航和我的代码有什么问题?

在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);
    }
}));

最新更新