【问题标题】:WinJS load configuration data on startupWinJS 在启动时加载配置数据
【发布时间】:2012-11-15 11:56:09
【问题描述】:

我正在使用 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”中使用我的启动图像并插入一个进度控件。

感觉这不是解决我问题的正确方法?

【问题讨论】:

    标签: javascript microsoft-metro winjs windows-store-apps


    【解决方案1】:

    您的解决方案看起来不错。您应该查看extended splash screen sample 以获得正确设置扩展初始屏幕的感觉,使其无缝。

    你觉得哪里不对?

    另一个建议的调整:更改您的 loadConfig 调用,以始终返回一个承诺,即使数据存储在本地;这样,您的代码可以以相同的方式流动,而您永远不需要您的

    if(config) {
        initializeUI(args);
    }
    

    代码。

    【讨论】:

    • 感谢您的反馈。我不喜欢我必须像启动屏幕那样设置“default.html”的样式,我想我希望我能以某种方式进入引导过程。但是如果你说没问题,我会相信你的话:) - 周末后我回到我的 Win8 机器上时,我会看看你的链接(由于某种原因,“浏览代码”选项没有似乎工作)。再次感谢。
    • 有一些选项;你已经推迟了它,这样你就有更多的时间。您不必为整个文件设置样式;只需添加一个绝对定位的元素。在我的应用程序中,我只是在完成后删除该元素。让它变得干净整洁。
    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多