Javascript Backbone.js:包含具有相同ID的多个模型的集合
我有一个主干网中的合并收藏,其中包含照片和相册 为了区分它们,我添加了一个字段Javascript Backbone.js:包含具有相同ID的多个模型的集合,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,我有一个主干网中的合并收藏,其中包含照片和相册 为了区分它们,我添加了一个字段type,它可以是photo或album。填充集合时,我会在集合#model方法中创建不同的模型 model: (attrs, options) -> switch attrs.type when 'album' then new App.Models.Album(attrs, options) when 'photo' then new App.Models.Photo(at
type
,它可以是photo
或album
。填充集合时,我会在集合#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。它似乎是可以撤销的,而无需创建主干分叉本身。我试过了,但也试过了
我想到了4种不同的方法,我不知道哪一种更好:
photo\u 2
。这会导致后端的更改以及前端的某些更改不会在/photos/photo_2
1000000
。这将极大地降低上载了具有给定ID的照片的给定用户也创建了具有相同ID的相册的可能性我建议您在相册和照片中添加以下内容:
idAttribute: 'uniqueId'
parse: function(response) {
response.uniqueId = type+'_'+response.id
return response;
}
从版本1.2开始,您可以使用来指定集合如何唯一标识模型。在您的情况下,可以执行以下操作以确保您的类型具有不同的ID
var MyCollection = Backbone.Collection.extend({
modelId: function (attrs) {
return attrs.type + "-" + attrs.id;
}
// ...
})
id属性:'uniqueId'
如果在声明时不知道此唯一ID,请尝试
idAttribute:'UUID'
我从中生成了一个,并把它放在这里,这里定义的这个属性不需要在模型中,所以我只放了一个UUID。有没有办法把模型作为一个参数而不仅仅是它的属性?你能编辑你的答案,让它更清晰一点,或者添加一个代码示例?