RequireJS, Circular Dependencies and Exports “Magic” Method
我一直在尝试使用詹姆士·伯克(James Burke)对这个问题的答案所建议的特殊"导出"魔术模块来设置RequireJS来处理循环依赖关系。
按照@jrburke在该问题中给出的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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; }); |
jsfiddle
问题在于,使用他自己的示例,未定义
我究竟做错了什么?
编辑:通过反复试验,我得到了上面的代码,其工作地址为:http://jsfiddle.net/jpk45vow/4/。 谁能解释它为什么起作用,因为这对我来说毫无意义。
编辑:我找不到有关魔术导出方法的更多信息。 但是,我可以使用虚拟的"容器"模块来模仿其预期的行为。 在这个小提琴中查看它:http://jsfiddle.net/amenadiel/a7thxz98/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | console.log("start"); define("Container",function() { var Container={}; return Container; }); define("Employee", ["Container"], function(Container) { var Employee= function(name) { this.name = name; this.company = new Container.Company(name +"'s own company"); }; Container.Employee = Employee; }); define("Company", ["Container"], function(Container) { var Company=function(name) { this.name = name; this.employees = []; }; Company.prototype.addEmployee = function(name) { var employee = new Container.Employee(name); this.employees.push(employee); employee.company = this; }; Container.Company = Company; }); define("main", ["Container","Employee","Company" ], function ( Container) { var john = new Container.Employee("John"); var bigCorp = new Container.Company("Big Corp"); bigCorp.addEmployee("Mary"); console.log(bigCorp); }); require(["main"]); |