我有點困惑我應該如何用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'
我只是不知道這是我應該怎麼做,或者我應該返回從服務的新服務限定使其成爲一個單例。
所有其他依賴像jquery
,sammy
,knockout
所有的工作是這樣,返回從require
工作對象,而不是需要被實例化像我的對象類型。
是否有使用requireJs的接受模式?
我應該做依賴注入還是服務位置?
這會導致測試JavaScript並找到一個可以重寫requireJs並返回被嘲弄的對象而不是真正的依賴關係的庫。
在茉莉花我可能有這樣的事情
describe '=== my view model ===', ->
sut = null
beforeEach ->
require ['myViewModel', 'mockService'], (viewModel, mockService) ->
sut = new viewModel
service: new mockService
我嘗試了testr但文檔是深不可測,有沒有真正的如何使用它的任何完整的例子。
SquireJs看起來像這樣的事情的可能性呢?