簡體   English   中英

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

[英]Backbone.js: Collection containing multiple Models with same ID

我在Backbone中有一個合並的集合,其中包含照片和相冊。

為了區分它們,我添加了一個字段type ,即photoalbum 當我填充集合時,我在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種不同的方法,我不知道哪一種更好:

  1. 我可以為id添加前綴。 我們說photo_2 這會導致后端的更改以及前端的某些更改,而不會在/photos/photo_2命中服務器
  2. 我可以分叉Backbone並更改這些 LOC。
  3. 我可以創建兩個單獨的集合,但必須在視圖中處理合並和排序(這會影響客戶端性能並需要重寫后端)
  4. 我可以從照片ID開始,比方說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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM