オブジェクトを RequireJs でインスタンス化する方法について少し混乱しています。すべてのオブジェクトを型付き関数として定義する coffeescript クラスを使用していますか? (正しい用語についてはわかりません)
現在、自分のオブジェクトに依存性注入を使用しています。ビューモデルとサービスの例を次に示します。
オプション配列を介して、コンストラクターのビュー モデルにサービスを挿入します
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は、この種のことにも可能性があるように見えますか?