4

最初:私は新しいwirejsであり、ドキュメントで何かを見逃している可能性が非常に高いです

通常のコンポーネント宣言では、次のようになります。

'Bnaya/App/TrackingService': {
    create: {
        module: 'Bnaya/App/TrackingService',
        args: []
    }
}

$ref を使用してそのコンポーネントに依存するすべてのコンポーネントは、同じインスタンスを取得するため、ワイヤも一種のシングルトン メカニズムになります (ほとんどの場合、これは私にとって良いことです)。

場合によっては、同じコンポーネント構成を使用して、すべての依存関係がコンポーネントの独自のインスタンスを取得することを望みます。

'Bnaya/App/TrackingService': {
    create: {
        module: 'Bnaya/App/TrackingService',
        args: [],
        notASingleton: true
    }
}

複数のコンポーネント名またはインスタンスのインライン作成を使用して同様の結果を得る方法を知っていますが、それを避けようとしています。

ありがとう!

4

1 に答える 1

3

wire.js で複数のコンポーネント インスタンスを作成するには、いくつかの方法があります。ニーズに応じて、どれがあなたに適しているかを確認できます。

まず、createファクトリを使用して、プロトタイプから新しいインスタンスを作成できます。create関数またはコンストラクタ モジュールを指定すると、それらが呼び出されます。ただし、create既存のオブジェクトを指定すると、それを使用Object.createして新しいインスタンスが作成され、通常どおりにさらに構成できます (例: propertiesinit、アドバイスなどを使用)。とまったく同じようObject.createに機能するため、プロトタイプ プロパティが共有されることに注意してください。

第二に、wireファクトリを使用して目的の効果を実現できます。非シングルトンを独自のワイヤ仕様でラップするだけです。簡単な例を次に示します。

thingThatNeedsATrackingService: {
    create: 'my/ThingThatNeedsATrackingService',
    properties: {
        foo: { wire: 'my/trackingServiceSpec' }
    }
},

otherThingThatNeedsATrackingService: {
    create: 'my/OtherThingThatNeedsATrackingService',
    properties: {
        foo: { wire: 'my/trackingServiceSpec' }
    }
},
//... more components

そして、でmy/trackingService.js

// Export the trackingService instance
$exports: { $ref: 'trackingService' },

trackingService: {
    create: {
        module: 'Bnaya/App/TrackingService',
        args: []
    }
},
//... more components if you need

これにより、a の新しいインスタンスが、Bnaya/App/TrackingService1 つを必要とする 2 つのもののそれぞれに挿入されます。を使用$exportsすると、CommonJS と同様に、ワイヤー スペックから特定のコンポーネントをエクスポートできますexports

このアプローチには、内部で「プライベート」コンポーネントを構成でき my/trackingService.js、必要に応じてそれらも作成されるという点で、いくつかの優れた利点がありますが、trackingService表示されるのは のみです。欠点としては、このようなプロトタイプ コンポーネントを独自のワイヤ スペックに分離するのは、少し手間がかかる場合があります。

今後のバージョンの wire.js では、他のタイプのコンポーネント スコープがサポートされるため、一部のケースがより簡単になります。

于 2014-01-21T18:59:11.817 に答える