软“重启”Windows 8应用程序

时间:2012-10-28 21:33:15

标签: windows-8 visual-studio-2012 winjs windows-store-apps

我将通过说明我理解新的Windows 8应用程序生命周期以及它如何100%由用户决定是否要终止应用程序来开头。所以,我想我想找到的是一种伪重启我的应用程序的方法,虽然我对其他建议持开放态度,因为我对设计现代UI应用程序很陌生。

我正在构建一个与需要通过OAuth进行身份验证的Web 2.0服务连接的应用程序。幸运的是,Windows 8 WebAuthenticationBroker使这一点变得简单:它显示了一个异步模式窗口,其中包含允许用户登录的Web框架,并且在完成后我将提供回调方法。

现在,显然我只想显示这个登录屏幕,如果我还没有为roamingSettings.values中的用户存储会话密钥。我在Visual Studio中使用了Grid App模板,只要应用程序被激活,我就会在default.js中执行这些函数(检查roamingStorage,调用WebAuthBroker等)。现在,Grid App模板提供了一个data.js,允许我定义一些我想要获取的REST端点。主要问题是在用户通过身份验证之前我无法获取这些REST端点!然而,他们仍然必须(至少,我认为)提前在data.js中声明。因此,我现在正在做的是为了避免在用户未登录的情况下出现错误,如下所示:

if (roamingSettings.values[sessionKey]){
   list = getFeedItems(); // my function that issues all the REST calls
} else {
   list = new WinJS.Binding.List();
}

如果在身份验证完成后手动重新启动应用程序,这可以正常工作,但我真的宁愿在身份验证完成后以异步方式完全重新加载应用程序。我已经花了很多时间在这上面而且我非常生气,因为我看过其他应用程序这样做(例如Instametrogram)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

要回答核心问题,如何软重启:window.location.reload()就是您所需要的。这只是刷新到位。

然而,您实际要做的是重置ListView实例上的数据源 - 您需要做的就是在运行时获取该控件,并重新分配数据源它。 E.g:

var lv = document.getElementById("myListView");
lv.winControl.itemSource = list;

此示例也应该在您当前将列表分配给列表视图时的应用程序中。