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