2014-09-30 82 views
2

我遇到了一個問題,我需要將某個變量綁定到模塊上下文。我有兩個文件夾:控制器和模型。在模型中,我有這樣一個模型:如何將變量添加到模塊上下文中 - Node.js

exports = { 
    name: String, 
    password: String 
} 

和控制器看起來是這樣的:

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

所以我需要訪問模型的控制器,而不是要求-ING它。我不認爲加載模型並將其提供給全球是這方面的良好做法。我正在尋找像MyNodeJsModule.addVarToContext(Model);

爲什麼我不想在控制器中需要模型的事情是,我需要通過外部系統加載模型,並讓外部系統通過數據庫訪問模型替換模型。

+0

爲什麼不要求()呢? – Benedikt 2014-09-30 09:58:53

+0

請閱讀最後。我需要通過需要它的外部系統來改變模型。之後,我需要將更改後的模型放入上下文中。 – Gelidus 2014-09-30 10:01:28

回答

0

可能你必須改變控制器這樣?

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

有沒有突出一個模型注入。另外,我可能想要在一個環境中注入更多。 – Gelidus 2014-09-30 14:27:53

+0

'你可以將一些變量設置爲全局範圍。但這不是一個好主意。因此,您可以選擇:require vs參數(您可以將參數設置爲數組或對象,並且您可以將模型傳遞到上下文) – Dilan 2014-09-30 14:43:55

+0

我知道這不是一個好主意,這就是爲什麼我正在尋找解決方案將變量綁定到上下文。 – Gelidus 2014-09-30 14:49:00

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 2014-09-30 20:42:29