2014-09-30 1 views
2

문제가 발생하여 모듈의 컨텍스트에 변수를 바인딩해야합니다. 두 개의 폴더가 있습니다 : 컨트롤러 및 모델. 모델에서,이 같은 모델이 있습니다변수를 모듈 컨텍스트에 추가하는 방법 - Node.js

exports = { 
    name: String, 
    password: String 
} 

및 컨트롤러는 다음과 같습니다

exports = { 
    onMessage: (message) { 
    Model.doSomething(); 
    } 
} 

그래서 나는 그것을 필요 - 보내고 않으면 서 컨트롤러에서 모델을 액세스해야합니다. 나는 모델을 로딩하고 그것을 글로벌하게 제공한다고 생각하지 않는다. MyNodeJsModule.addVarToContext(Model);

컨트롤러에서 모델을 필요로하지 않는 이유는 외부 시스템에서로드 할 모델이 필요하고 외부 시스템이 모델을 데이터베이스 액세스 가능 모델로 교체해야하기 때문입니다.

+0

왜) (그것을 필요하지 않습니다? – Benedikt

+0

끝까지 읽으십시오. 나는 그것을 필요로 할 외부 시스템에 의해 변경 될 모델을 필요로한다. 그런 다음, 변경된 모델을 컨텍스트로 가져와야합니다. – Gelidus

답변

0

아마도 컨트롤러를 이와 같이 변경해야합니까?

module.exports = function(Model) { 
    return { 
     onMessage: function(message) { 
     Model.doSomething(); 
     } 
    }; 
} 
+0

주사 할 모델이 하나도 없습니다. 또한 나는 하나의 상황에 더 많은 것을 주입하고 싶을 수도있다. – Gelidus

+0

'중 일부 변수를 전역 범위로 설정할 수 있습니다. 그러나 이것은 좋은 생각이 아닙니다. 결과적으로 당신은 선택의 여지가있다 : require 대 인수 (당신은 배열이나 객체로 인수를 설정할 수 있고, 컨텍스트에만 모델을 전달할 수있다) – Dilan

+0

나는 그게 좋은 생각이 아니라는 것을 안다. 그래서 나는 해결책을 찾고있다. 변수를 컨텍스트에 바인딩합니다. – Gelidus

0

정확하게 필요한 것은 아니지만 Controller을 생성자로 내 보낸 다음 각 인스턴스를 특정 모델에 바인딩 할 수 있습니다. 컨트롤러 그래서

:

// Constructor 
var Controller = function(model){ 
    this._model = model; 
} 

Controller.prototype.onMessage = function(message) { 
    this._model.doSomething(message); 
}; 

Controller.prototype.setModel = function(newModel){ 
    this._model = newModel; 
} 

exports.Controller = Controller; 

다음 (외부) :

var ModelController = require('./controller').Controller; 

var modelController1 = new ModelController(model1); 
var modelController2 = new ModelController(model2); 

modelController1.setModel(model2); 
modelController2.setModel(model1); 
+0

내가 원하는 것은 컨트롤러에 모델을 주입하는 것입니다. 그렇기 때문에 모델을 글로벌 변수처럼 호출 할 수는 있지만 하나의 모듈에만 적용됩니다. 그래서 컨텍스트 바인딩을 원했습니다. – Gelidus