2

HTML/CSS/JS と WinJS フレームワークを使用して、Windows ストア用のアプリに取り組んでいます。

私のアプリは、オンラインの場合はネットワーク経由、そうでない場合はローカルのいずれかで、起動時に構成データをロードする必要があります。

私の問題は、理想的には、データが読み込まれるまで、アプリはプログレス コントロール付きのスプラッシュ スクリーンを表示するだけでよいということです。しかし、それを達成するためにロードコードをどこに置くべきかわかりません。

私はこのようなことができます:

(function () {
    "use strict";

    WinJS.Binding.optimizeBindingReferences = true;

    var app = WinJS.Application;
    var activation = Windows.ApplicationModel.Activation;
    var nav = WinJS.Navigation;

    function loadConfig() {
        return WinJS.xhr({ url: myURL }).then(
            function (xhr) {
                // parse response stuff
            },
            function (xhr) {
                // do error handling stuff
            }
        );
    }

    function initializeUI(args) {
        // The generated code for setting up the navigation controller, but moved to a seperate function
        args.setPromise(WinJS.UI.processAll().then(function () {
            if (nav.location) {
                nav.history.current.initialPlaceholder = true;
                return nav.navigate(nav.location, nav.state);
            } else {
                return nav.navigate(Application.navigator.home);
            }
        }));
    }

    app.onactivated = function (args) {
        if (args.detail.kind === activation.ActivationKind.launch) {
            if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {

                loadConfig().then(
                    function () {
                        initializeUI(args);
                    }
                );
            } 
            if (app.sessionState.history) {
                nav.history = app.sessionState.history;
            }
            if ( config ) // check if configuration exists to prevent calling this twice
                initializeUI(args)
        }
    };
    app.start();
})();

しかし、それではデータが読み込まれるまで「default.html」ページが表示されるため、「default.html」でスプラッシュ イメージを使用し、進行状況コントロールを挿入する必要があります。

それは私の問題の正しい解決策のように感じませんか?

4

1 に答える 1

3

あなたのソリューションは問題ないようです。拡張スプラッシュ スクリーンのサンプルを見て、拡張スプラッシュ スクリーンをシームレスにセットアップするための適切な感覚をつかむ必要があります。

何が正しくないと思いますか?

もう 1 つの提案された微調整: loadConfig 呼び出しを変更して、データがローカルに保存されている場合でも常に promise を返すようにします。そうすれば、コードは同じように流れることができ、

if(config) {
    initializeUI(args);
}

コード。

于 2012-11-15T15:40:06.583 に答える