Backbone.js:包含具有相同ID多个模型的集合

bybem2ql  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(159)

我在Backbone中有一个包含照片和相册的合并收藏。
为了区分它们,我添加了一个字段type,它可以是photoalbum

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.js 本身的分叉就可以撤销。我已经试过了,但它也是fails 35 tests
我想到了4种不同的方法,我不知道哪一种更好:
1.我可以给id添加一个前缀,比如photo_2。这会导致后端的更改以及前端的一些更改,从而不会在/photos/photo_2处命中服务器
1.我可以分叉 Backbone.js 并更改这些LOC。
1.我可以创建两个单独的集合,但必须在视图中处理合并和排序(这会影响客户端性能,并需要重写后端)
1.我可以从一个照片ID开始,比如说1000000。这将极大地减少一个给定的用户用给定的ID上传了一张照片,也用相同的ID创建了一个相册的可能性。

bq8i3lrv

bq8i3lrv1#

从1.2版开始,您可以使用Collection.modelId来指定集合将如何唯一标识模型。在您的情况下,您可以执行以下操作以确保您的类型具有不同的ID。

var MyCollection = Backbone.Collection.extend({
    modelId: function (attrs) {
      return attrs.type + "-" + attrs.id;
    }
    // ...
  })
zpgglvta

zpgglvta2#

我建议您在“相册”和“照片”中添加以下内容:

idAttribute: 'uniqueId'
  parse: function(response) {
    response.uniqueId = type+'_'+response.id
    return response;
  }
xcitsw88

xcitsw883#

idAttribute:'uniqueId'
如果在声明时此uniqueId未知,请尝试
idAttribute:'UUID'
我从https://www.uuidgenerator.net/生成了一个属性,并将其放在这里,这里定义的这个属性不需要在模型中,所以我只放入了一个UUID。

相关问题