2015-01-28 3 views
0

James Burke's answer에서 this question으로 권장되는 the special 'exports' magic module을 사용하여 원형 종속성을 처리하도록 RequireJS를 설정하려고했습니다. 이 질문에 @jrburke에 의해 주어진 예에 따라RequireJS, 순환 의존성 및 내보내기 "Magic"메서드

:

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

문제 자신의 예를 사용하여 exports 모듈이 정의되지 않은, 따라서 exports.Employeeexports.Company이 없다는 것입니다 세트. 정의 콜백 함수의 인수로 내보내기를 포함 시키려고하면 두 경우 모두 비어있는 것으로 초기화되고 할당 된 생성자 함수가 전달되지 않습니다.

내가 뭘 잘못하고 있니?

EDIT : 시행 착오를 통해 위 코드가 http://jsfiddle.net/jpk45vow/4/에서 작동합니다. 누구든지 설명 할 수 있습니까 그것이 작동하지 않기 때문에 그것은 나에게 의미가 있습니다.

+0

마치 수출 모듈이 글로벌 객체가 아닌 것처럼 보입니다. 모듈을 내보내는 데 도움이되는 로컬 범위가 있습니다. 그래서 그것이 비어있는 것입니다. 실제로, 당신은 그것을 요구하거나 메인 모듈에서 사용할 필요가 없습니다. – amenadiel

+0

예, 귀하의 의견을 읽은 후, 나에게 마법 모듈이하고있는 일은, 각 모듈 자체 컨테이너가 있다는 점을 제외하고, 아래에서 개발 한 것과 매우 유사한 컨테이너 객체를 만드는 것입니다. main이 모듈을 필요로 할 때 requireJS는 모듈 대신 컨테이너를 반환하여 모든 종속성 문제를 해결합니다. –

답변

3

편집 : 마법 내보내기 방법에 대한 추가 정보를 찾을 수 없습니다. 그러나 더미 "컨테이너"모듈로 의도 된 동작을 모방 할 수는 있습니다. 이 바이올린에서보기 : http://jsfiddle.net/amenadiel/a7thxz98/

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"]); 
+0

예, 말했듯이'exports' 객체는 빈 상태로 초기화되고 할당 된 생성자 함수를 전달하지 않습니다. –

+0

예를 들면 다음과 같습니다. http://jsfiddle.net/jpk45vow/3/ –

+0

마법 수출 모듈이 말한대로하지 않는 것 같습니다. 내 편집보기 – amenadiel