有几种方法可以在 wire.js 中创建多个组件实例。根据您的需要,您可以查看哪一种可能适合您。
首先,您可以使用create
工厂从原型中获取新实例。当你给create
一个函数或构造函数模块时,它会调用它们。但是,如果您提供create
一个现有对象,它将用来Object.create
生成一个新实例,然后您可以像往常一样对其进行进一步配置(例如,使用properties
、init
、通知等)。请记住,它的工作原理与 完全一样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
Bnaya/App/TrackingService
这将向需要一个的两个事物中的每一个注入一个新的实例。允许您从电线规范中$exports
导出一个或多个特定组件,就像 CommonJS 一样exports
。
这种方法有一些很好的好处,因为您可以在内部配置“私有”组件,
my/trackingService.js
并且它们也将根据需要创建,但只有它们trackingService
是可见的。不利的一面是,有时将这样的原型组件分离到自己的电线规范中需要更多的工作。
即将发布的wire.js 版本将支持其他类型的组件范围,因此会使某些情况更容易。