[英]Backbone.js: Collection containing multiple Models with same ID
我在Backbone中有一個合並的集合,其中包含照片和相冊。
為了區分它們,我添加了一個字段type
,即photo
或album
。 當我填充集合時,我在Collection#model
方法中創建了不同的模型
model: (attrs, options) ->
switch attrs.type
when 'album' then new App.Models.Album(attrs, options)
when 'photo' then new App.Models.Photo(attrs, options)
現在我發現了一個奇怪的錯誤,即添加照片和具有相同ID的相冊(假設為2
)會導致合並。
我在源代碼中跟蹤了這些 LOC。 似乎它沒有創建一個Backbone本身的分支是可以撤銷的。 我已經嘗試過,但它也沒有通過35次測試 。
我想到了4種不同的方法,我不知道哪一種更好:
photo_2
。 這會導致后端的更改以及前端的某些更改,而不會在/photos/photo_2
命中服務器 1000000
。 這將極大地降低已經上傳具有給定ID的照片的給定用戶也創建具有相同ID的相冊的可能性。 我建議在相冊和照片上添加以下內容:
idAttribute: 'uniqueId'
parse: function(response) {
response.uniqueId = type+'_'+response.id
return response;
}
從版本1.2開始,您可以使用Collection.modelId
指定集合如何唯一地標識模型。 在您的情況下,您可以執行以下操作以確保您的類型具有不同的ID。
var MyCollection = Backbone.Collection.extend({
modelId: function (attrs) {
return attrs.type + "-" + attrs.id;
}
// ...
})
idAttribute:'uniqueId'
如果在聲明時不知道這個uniqueId,請嘗試
idAttribute:'UUID'
我從https://www.uuidgenerator.net/生成一個並把它放在這里,這里定義的這個屬性不需要在模型中,所以我只是放入一個UUID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.