2013-07-11 94 views
2

我一直在試圖在使用BackboneJS時圍繞最佳REST風格的做法。我覺得自己已經寫下了自己的一點,可以使用一些指導。如果我需要保存Backbone.Collection,它是否是代碼味道?

我的場景是這樣的:用戶想要創建一個新的播放列表,其中包含N個項目。 N個項目的數據來自第三方API,突發數量爲50個。因此,我想添加一個新的空白播放列表,並且當50的突發進來時,保存項目並添加到我的播放列表中。

這導致我的播放列表模型有一個方法,爲addItems,它看起來像:

addItems: function (videos, callback) { 
    var itemsToSave = new PlaylistItems(); 
    var self = this; 

    // Create a new PlaylistItem with each Video. 
    videos.each(function (video) { 

     var playlistItem = new PlaylistItem({ 
      playlistId: self.get('id'), 
      video: video 
     }); 

     itemsToSave.push(playlistItem); 
    }); 

    itemsToSave.save({}, { 
     success: function() { 

      // OOF TERRIBLE. 
      self.fetch({ 
       success: function() { 
        // TODO: For some reason when I call self.trigger then allPlaylists triggers fine, but if I go through fetch it doesnt trigger? 
        self.trigger('reset', self); 

        if (callback) { 
         callback(); 
        } 

       } 
      }); 

     }, 
     error: function (error) { 
      console.error("There was an issue saving" + self.get('title'), error); 
     } 
    }); 
} 

ItemsToSave一般是在它50項的集合。由於BackboneJS不提供Save for Collections,我寫了自己的。我並不在乎爲我的Collection創建一個Model包裝器。

所以,當我打電話保存,我的項目都沒有ID。數據庫分配這些ID,但該信息並非由Backbone隱式更新,因爲我保存的是Collection而不是Model。因此,一旦保存成功,我會在我的播放列表中調用fetch來檢索更新的信息。這很糟糕,因爲播放列表中可能包含數千個項目 - 我不想每次保存多個項目時都抓取數千個項目。

所以,我想也許我需要重寫集合的分析方法,並手動將服務器的響應映射回集合。

這一切似乎......矯枉過正/錯誤。我在做一些架構不正確的事情嗎? RESTful架構如何處理這種情況?

回答

2

我的意見是做什麼有效,感覺乾淨,無視RESTafarians的信用可能。批量創建,批量更新,批量刪除是REST人員閉眼並假裝不存在的真實世界用例。這些方針的東西聽起來像一個合理的第一次嘗試對我說:

  • 創建bulkAdd方法或仔細覆蓋add如果你感覺自信
  • 不作模型或他們尚未添加到集合中,雖然
  • 做你的批量POST或任何讓他們進入數據庫並得到指定的ID
  • 然後將它們作爲模型添加到集合
相關問題