내 시스템에는 개발 중에 각각 별도의 파일로 브라우저에로드 된 여러 "클래스"가 있으며 프로덕션을 위해 함께 연결되었습니다. 로드되면 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의 제안 에 따라 각 클래스를 자체 AMD 모듈 로 만드는 것을 고려하고 있습니다 .
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");
것 그것이 작동되도록 그것은 나를 필요로하지만 RequireJS를 사용하지 않는 열등으로이 솔루션을 참조 / AMD는 개발자가이 새로 생성 된 순환 종속성을 인식하고 그것에 대해 뭔가를 할 수 있습니다.
RequireJS / AMD로이 문제를 해결하는 더 좋은 방법이 있습니까? 아니면 RequireJS / AMD를 설계되지 않은 것에 사용하고 있습니까?
function(exports, Company)
하고function(exports, Employee)
. 어쨌든 RequireJS에 감사드립니다.