WireJS-每个依赖组件的新组件实例



首先:我是新的wirejs,很有可能我错过了文档上的东西

在常规组件声明中,例如:

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

使用$ ref取决于该组件的所有组件都将获得相同的实例,因此电线也将是一种单身机制(在大多数情况下对我来说对我有好处)

在某些情况下,我希望每个依赖者都会使用相同的组件配置获得自己的组件实例。

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

我知道如何使用多个组件名称或实例创建类似的结果,但是我要避免的结果。

谢谢!

有几种方法可以在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

将把Bnaya/App/TrackingService的新实例注入需要的两件事。$exports允许您从电线规格中导出特定的组件或组件,就像COMPORJS exports

这种方法具有一些不错的好处,您可以在内部配置"私有"组件 my/trackingService.js也将根据需要创建它们,但只能看到trackingService。不利的一面是,将这样的原型组件分离为自己的电线规格有时会有更多的工作。

即将发布的Wire.js版本将支持其他类型的组件示波器,因此将使某些情况更容易。

最新更新