我一直在試圖在使用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架構如何處理這種情況?