1

我有點困惑我應該如何用RequireJs實例化我的對象。我正在使用coffeescript類,它將所有對象定義爲鍵入的函數? (不知道在正確的術語)依賴注入或服務位置與RequireJs

在我使用依賴注入我自己的對象的時候,這裏是一個例子視圖模型和服務

我注入我的服務到通過選擇在構造函數中視圖模型陣列

define 'myViewModel', [ 'jquery', 'sammy' ], ($, sammy) -> 
    class myViewModel 
    constructor: (options) -> 
     self = @ 
     @service = options.service 

     @router = sammy(-> 
     @get('/SomeRoute#:id', self.onHashUpdated) 
    ) 
     @router.run() 

這裏我注入alertId到服務

define 'myService', ['baseService'], (baseService) -> 
    class myService extends baseService 
    constructor: (options) -> 
     @alertId = options.alertId 
     super()  

這裏是我的高層次的頁面對象。我做我的視圖模型實例化並將所有需求依賴項注入視圖模型。

require [ 'myViewModel', 'myService', 'domReady!' ], (viewModel, service) -> 
    myViewModelInstance = new viewModel 
    service: new service 
     alertId: 'some-alert-id' 

我只是不知道這是我應該怎麼做,或者我應該返回從服務的新服務限定使其成爲一個單例。

所有其他依賴像jquerysammyknockout所有的工作是這樣,返回從require工作對象,而不是需要被實例化像我的對象類型。

是否有使用requireJs的接受模式?

我應該做依賴注入還是服務位置?


這會導致測試JavaScript並找到一個可以重寫requireJs並返回被嘲弄的對象而不是真正的依賴關係的庫。

在茉莉花我可能有這樣的事情

describe '=== my view model ===', -> 
    sut = null 

    beforeEach -> 
    require ['myViewModel', 'mockService'], (viewModel, mockService) -> 
     sut = new viewModel 
     service: new mockService 

我嘗試了testr但文檔是深不可測,有沒有真正的如何使用它的任何完整的例子。

SquireJs看起來像這樣的事情的可能性呢?

回答

0

我已經走了下面,有每一個對象實例化它然後,使用鄉紳JS注射興農JS嘲笑的時候我測試模塊自己的依賴

define 'myService', ['baseService', 'alert'], (baseService, alert) -> 
    class myService extends baseService 
    constructor: (options) -> 
     super() 
     @alertId = new alert