In meinem System habe ich eine Reihe von "Klassen" in den Browser geladen, die während der Entwicklung jeweils separate Dateien enthalten und für die Produktion miteinander verkettet sind. Beim Laden initialisieren sie hier G
wie in diesem Beispiel eine Eigenschaft für ein globales Objekt :
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");
Anstatt mein eigenes globales Objekt zu verwenden, denke ich darüber nach, jede Klasse zu einem eigenen AMD-Modul zu machen , basierend auf James Burkes Vorschlag :
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");
});
Das Problem ist, dass es zuvor keine Abhängigkeit von der Deklarationszeit zwischen Mitarbeiter und Unternehmen gab: Sie konnten die Deklaration in die von Ihnen gewünschte Reihenfolge bringen, aber jetzt führt RequireJS eine Abhängigkeit ein, die hier (absichtlich) zirkulär ist Der obige Code schlägt fehl. Das addEmployee()
Hinzufügen einer ersten Zeile var Employee = require("Employee");
würde natürlich funktionieren , aber ich sehe diese Lösung als schlechter an, als RequireJS / AMD nicht zu verwenden, da ich als Entwickler diese neu erstellte zirkuläre Abhängigkeit kennen und etwas dagegen tun muss.
Gibt es eine bessere Möglichkeit, dieses Problem mit RequireJS / AMD zu lösen, oder verwende ich RequireJS / AMD für etwas, für das es nicht entwickelt wurde?
function(exports, Company)
undfunction(exports, Employee)
. Wie auch immer, danke für RequireJS, es ist großartig.