1

我使用 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 来实现这个功能吗?如果可以,它会是什么样子?

提前致谢。

4

1 回答 1

0

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

(function () {
    "use strict";
    require("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 文件中解析出来,并在我运行所有依赖链时准备就绪。

于 2017-10-18T07:55:57.947 回答