第一:我是新来的线人,很有可能我错过了一些文档上的东西
对于常规组件声明,例如:
'Bnaya/App/TrackingService': {
    create: {
        module: 'Bnaya/App/TrackingService',
        args: []
    }
}所有使用$ref依赖于该组件的组件都将得到相同的实例,因此连线也是一种单例机制(在大多数情况下对我都有好处)。
在某些情况下,我希望每个依赖者使用相同的组件配置获得自己的组件实例。
'Bnaya/App/TrackingService': {
    create: {
        module: 'Bnaya/App/TrackingService',
        args: [],
        notASingleton: true
    }
}我知道如何使用多个组件名称或实例的内联创建获得类似的结果,但这是我想要避免的。
谢谢!
发布于 2014-01-21 18:59:11
有几种方法可以在wire.js中创建多个组件实例。根据您的需要,您可以看到哪一个可能为您工作。
首先,您可以使用create工厂从原型中生成新的实例。当您给create一个函数或构造函数模块时,它将调用它们。但是,如果您给create一个现有对象,它将使用create生成一个新实例,然后您可以像往常一样进一步配置该实例(例如使用properties、init、建议等)。请记住,它的工作方式与Object.create完全一样,因此原型属性将被共享。
其次,您可以使用 factory来实现您想要的效果。你只需要在它自己的电线规格包非单例。下面是一个简单的例子:
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版本将支持其他类型的组件作用域,因此将使某些情况更加容易。
https://stackoverflow.com/questions/21265641
复制相似问题