Trong hệ thống của tôi, tôi có một số "lớp" được tải trong trình duyệt, mỗi lớp là một tệp riêng biệt trong quá trình phát triển và được nối với nhau để sản xuất. Khi chúng được tải, chúng khởi tạo một thuộc tính trên một đối tượng toàn cục, tại đây G
, như trong ví dụ sau:
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");
Thay vì sử dụng đối tượng toàn cục của riêng mình, tôi đang cân nhắc để tạo mô-đun AMD riêng của mỗi lớp , dựa trên đề xuất của James Burke :
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");
});
Vấn đề là trước đây, không có sự phụ thuộc về thời gian khai báo giữa Nhân viên và Công ty: bạn có thể đặt khai báo theo bất kỳ thứ tự nào bạn muốn, nhưng bây giờ, bằng cách sử dụng RequestJS, điều này đưa ra một phụ thuộc, đây là thông tư (có chủ ý), mã trên không thành công. Tất nhiên, addEmployee()
thêm một dòng đầu tiên var Employee = require("Employee");
sẽ làm cho nó hoạt động , nhưng tôi thấy giải pháp này kém hơn so với việc không sử dụng RequestJS / AMD vì nó yêu cầu tôi, nhà phát triển, phải biết về sự phụ thuộc vòng tròn mới được tạo này và làm gì đó với nó.
Có cách nào tốt hơn để giải quyết vấn đề này với RequiJS / AMD, hay tôi đang sử dụng RequiJS / AMD cho thứ mà nó không được thiết kế?
function(exports, Company)
vàfunction(exports, Employee)
. Dù sao thì, cảm ơn vì RequiJS, nó thật tuyệt.