2

この前に、新しいWindows 8アプリケーションのライフサイクルと、アプリを終了するかどうかをユーザーが100%決定する方法を理解していることを説明します。ですから、私が探しているのは、アプリを疑似的に再起動する方法だと思いますが、Modern UIアプリの設計はかなり新しいので、他の提案も受け付けています。

OAuthによる認証を必要とするWeb2.0サービスとインターフェイスするアプリを構築しています。幸い、Windows 8 WebAuthenticationBrokerを使用すると、これが簡単になります。ユーザーがサインインできるようにWebフレームを格納する非同期モーダルウィンドウが表示され、完了したらコールバックメソッドを提供できます。

ここで、roamingSettings.valuesにユーザーのセッションキーがまだ保存されていない場合にのみ、このサインイン画面を表示したいのは明らかです。Visual Studioでグリッドアプリテンプレートを使用し、アプリがアクティブ化されるとすぐに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 に答える