2

我将首先说我了解新的 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)。

有任何想法吗?

4

1 回答 1

1

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

但是,您实际上要做的是重置 ListView 实例上的数据源——您需要做的就是在运行时获取该控件,并将数据源重新分配给它。例如:

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

这方面的一个例子也应该在你拥有的应用程序中,当它当前将列表分配给列表视图时。

于 2012-10-29T00:14:53.650 回答