【发布时间】:2015-03-27 10:04:16
【问题描述】:
我一直在尝试按照James Burke's answer 到this question 的建议使用the special 'exports' magic module 设置RequireJS 来处理循环依赖项。
按照@jrburke 在该问题中给出的示例:
define("Employee", ["exports", "Company"], function(Company) {
function Employee(name) {
this.name = name;
this.company = new Company.Company(name + "'s own company");
};
exports.Employee = Employee;
});
define("Company", ["exports", "Employee"], function(Employee) {
function Company(name) {
this.name = name;
this.employees = [];
};
Company.prototype.addEmployee = function(name) {
var employee = new Employee.Employee(name);
this.employees.push(employee);
employee.company = this;
};
exports.Company = Company;
});
问题是用他自己的例子,exports 模块是未定义的,因此exports.Employee 和exports.Company 不设置。如果我尝试将导出作为定义回调函数的参数包含在内,它只会在两种情况下都初始化为空,并且不携带分配给它的构造函数。
我做错了什么?
编辑:通过反复试验,我得到了上面的代码:http://jsfiddle.net/jpk45vow/4/。谁能解释为什么它有效,因为它对我来说毫无意义。
【问题讨论】:
-
似乎导出模块不是全局对象。它有一个本地范围作为导出模块的助手。这就是为什么它在 main 中是空的。事实上,你不需要它,也不需要在你的主模块中使用它。
-
是的,在阅读了您的 cmets 之后,在我看来,魔术模块正在创建一个与您在下面开发的非常相似的容器对象,除了每个模块都有自己的容器。然后当 main 需要模块时,requireJS 返回容器而不是模块,解决所有依赖问题。
标签: javascript requirejs circular-dependency