2013-06-03 124 views
10

我在Backbone中包含照片和相冊的合併集合。Backbone.js:包含多個具有相同ID的模型的集合

爲了區分它們,我添加了一個字段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)在合併的結果。

我跟蹤下來到源代碼these LOC。看起來,如果不創建Backbone本身的分支,它是可撤銷的。我試過了,但它也是fails 35 tests

我想起了4種不同的這樣做的方法,我不知道哪個是最好的一個:

  1. 我可以添加一個前綴標識。比方說photo_2。這將導致後端的變化,以及在前端一些變化不會在/photos/photo_2
  2. 點擊服務器,我可以叉骨幹和change these LOC。
  3. 我可以創建兩個獨立的集合,但必須在視圖中處理合並和排序(這會影響客戶端性能並需要重寫後端)
  4. 我可以從照片ID開始,比如1000000 。這將極大地降低已經上傳具有給定ID的照片的給定用戶也已經創建了具有相同ID的相冊的可能性。

回答

7

由於1.2版本,你可以使用Collection.modelId來指定您的收藏唯一標識模型。在你的情況下,你可以做以下事情來確保你的類型有不同的ID。

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

有沒有一種方法可以將模型作爲參數而不是其屬性? –

7

我建議兩個相冊和照片,添加以下內容:

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