有幾種方法可以在wire.js中創建多個組件實例。根據您的需求,您可以看到哪一個可能適合您。
首先,您可以使用create
工廠從原型獲取新實例。當您給create
函數或構造函數模塊時,它會調用它們。但是,如果您給create
一個現有對象,它將使用Object.create
生成一個新實例,然後您可以像平常一樣進一步進行配置(例如,使用properties
,init
,建議等)。請記住,它的工作原理與Object.create
完全相同,因此原型屬性將被共享。儘管如此,你可以使用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
的新實例爲每個需要一個兩件事情。 $exports
允許您從導線規格中導出特定的一個或多個組件,非常類似於CommonJS exports
。
這種方法有一些好處,您可以在 my/trackingService.js
內配置「專用」組件,它們也將根據需要創建,但只有trackingService
可見。不利的一面是,將這樣一個原型組件分離成它自己的線規範有時候還有更多的工作要做。
即將發佈的wire.js版本將支持其他類型的組件作用域,因此會使一些情況更容易。
我的班級系統主要是骨幹。 有沒有辦法讓你描述的第一個方法可以使用它? 我想說服我的團隊在一個新項目中使用wire,另一種方法看起來更復雜,需要對當前代碼庫進行更多更改。 ARR我只是不能格式化我的意見在這裏); 謝謝! – Bnaya
不幸的是,Backbone的模型和集合的設計並不適合Object.create。但是,您可以非常有效地使用Backbone的第二種技術(電線工廠)。另一個wire.js用戶創建了一個顯示它的項目:https://github.com/pieterv/backbone-require-wire,具體請參見:https://github.com/pieterv/backbone-require-wire/blob/master /js/todos/src/context/main.js#L54-L58 –