gpt4 book ai didi

javascript - wirejs - 每个依赖组件的新组件实例

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:00 24 4
gpt4 key购买 nike

首先:我是 wirejs 新手,很可能我遗漏了文档中的某些内容

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

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

使用 $ref 依赖于该组件的所有组件都将获得相同的实例,因此 wire 也将是一种单例机制(在大多数情况下这对我有好处)

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

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

我知道如何使用多个组件名称或内联创建实例来获得类似的结果,但这是我试图避免的。

谢谢!

最佳答案

有几种方法可以在 wire.js 中创建多个组件实例。根据您的需要,您可以看到哪一个可能适合您。

首先,您可以使用create 工厂从原型(prototype)中生成新实例。当您给 create 一个函数或构造函数模块时,它会调用它们。但是,如果您给 create 一个现有对象,它将使用 Object.create 生成一个新实例,然后您可以像往常一样进一步配置它(例如使用 属性init、建议等)。请记住,它的工作方式与 Object.create 完全相同,因此原型(prototype)属性将被共享。

其次,您可以使用 wire 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 的新实例注入(inject)到两个需要一个的事物中。 $exports 允许您从线规导出一个或多个特定组件,很像 CommonJS exports

这种方法有一些好处,您可以在内部配置“私有(private)”组件my/trackingService.js 它们也会根据需要创建,但只有 trackingService 是可见的。不利的一面是,有时将像这样的原型(prototype)组件分离到它自己的线规中需要更多的工作。

即将发布的 wire.js 版本将支持其他类型的组件范围,因此会简化某些情况。

关于javascript - wirejs - 每个依赖组件的新组件实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com