【发布时间】:2011-06-20 08:16:49
【问题描述】:
在我的系统中,我在浏览器中加载了许多“类”,每个“类”在开发过程中都是单独的文件,并在生产过程中连接在一起。在加载它们时,它们会初始化全局对象的属性,此处为 G,如下例所示:
var G = {};
G.Employee = function(name) {
this.name = name;
this.company = new G.Company(name + "'s own company");
};
G.Company = function(name) {
this.name = name;
this.employees = [];
};
G.Company.prototype.addEmployee = function(name) {
var employee = new G.Employee(name);
this.employees.push(employee);
employee.company = this;
};
var john = new G.Employee("John");
var bigCorp = new G.Company("Big Corp");
bigCorp.addEmployee("Mary");
我正在考虑根据James Burke's suggestion 为每个类创建自己的AMD module,而不是使用我自己的全局对象:
define("Employee", ["Company"], function(Company) {
return function (name) {
this.name = name;
this.company = new Company(name + "'s own company");
};
});
define("Company", ["Employee"], function(Employee) {
function Company(name) {
this.name = name;
this.employees = [];
};
Company.prototype.addEmployee = function(name) {
var employee = new Employee(name);
this.employees.push(employee);
employee.company = this;
};
return Company;
});
define("main", ["Employee", "Company"], function (Employee, Company) {
var john = new Employee("John");
var bigCorp = new Company("Big Corp");
bigCorp.addEmployee("Mary");
});
问题是,之前 Employee 和 Company 之间没有声明时间依赖关系:你可以按照你想要的任何顺序放置声明,但是现在,使用 RequireJS,这引入了一个依赖关系,这里(故意)循环,所以上面的代码失败了。当然,在addEmployee() 中,添加第一行var Employee = require("Employee"); 将是make it work,但我认为这个解决方案不如不使用RequireJS/AMD,因为它要求我,开发人员,意识到这个新创建的循环依赖并为此做点什么。
有没有更好的方法来使用 RequireJS/AMD 解决这个问题,或者我是否将 RequireJS/AMD 用于它不是为它设计的东西?
【问题讨论】:
标签: javascript commonjs requirejs