我使用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来实现这个功能吗?如果可以,它会是什么样子?
提前致谢。
答案 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文件解析出来的,当我运行所有依赖链时就准备好了。