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

时间:2013-06-03 17:29:43

标签: javascript backbone.js coffeescript

我在Backbone中有一个合并的集合,其中包含照片和相册。

为了区分它们,我添加了typephoto字段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)会导致合并。

我在源代码中将其跟踪到these LOC。似乎它没有创建一个Backbone本身的分支是可以撤销的。我已经尝试了,但它也fails 35 tests

我想到了4种不同的做法,我不知道哪一种更好:

  1. 我可以为id添加前缀。我们说photo_2。这导致后端的更改以及前端的某些更改在/photos/photo_2
  2. 处未到达服务器
  3. 我可以分叉Backbone和change these LOC。
  4. 我可以创建两个单独的集合,但必须在视图中处理合并和排序(这会影响客户端性能并需要重写后端)
  5. 我可以从照片ID开始,比方说1000000。这将极大地降低上传具有给定ID的照片的特定用户也创建了具有相同ID的相册的可能性。

2 个答案:

答案 0 :(得分:7)

我建议在相册和照片上添加以下内容:

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

答案 1 :(得分:0)

idAttribute:'uniqueId'

如果在声明时不知道此uniqueId,请尝试

idAttribute:'UUID'

我从https://www.uuidgenerator.net/生成了一个,并将其放在此处,此处定义的此属性不需要在模型中,因此我只放入一个UUID。