在javascript库中使用JSON配置文件

时间:2017-10-18 05:43:49

标签: javascript almond

我使用almond.js来实现我的javascript库。我试图将配置变量与代码分开。我创建了config.json文件,其中包含所有“全局”变量并定义了“模型”,它将注入其他模块:

define("Model", [], function () {
    "use strict";

    var model = {
        options: {
        }
    };

    (function () {
        var xhr = new XMLHttpRequest();
        xhr.overrideMimeType("application/json");
        xhr.open('GET', 'Config/config.json', true);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 300)) {
                model.options = JSON.parse(xhr.response);
            }
        };
        xhr.send();
    })();

    return model;
});

问题是,然后我定义了使用我的'模型'的模块,请求仍然没有完成,所有'选项'参数仍然是undefined。 有没有办法实现等待模型初始化的依赖关系,或者用almond.js实现这个功能的另一种方式?

我应该用require.js替换almond.js来实现这个功能吗?如果可以,它会是什么样子?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法: 在更改之前,我的启动器脚本是:

(function () {
    "use strict";
    require("Core");
})();

其中“Core”是包含所有依赖项的主要模块。

改变: 我删除了静态define("Model", [],function(){...});

我的发射器变成了:

(function () {
    "use strict";
    (function () {
        var xhr = new XMLHttpRequest();
        xhr.overrideMimeType("application/json");
        xhr.open('GET', 'Config/config.json', true);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 300)) {
                var model = {
                    options: JSON.parse(xhr.response)
                };

                if (define && define.amd) {
                    define("Model", model);
                    require("Core"); 
                }
            }
        };
        xhr.send();
    })();
})();

现在所有的模型选项都是从config.json文件解析出来的,当我运行所有依赖链时就准备好了。