在使用 BackboneJS 时,我一直在尝试围绕最佳 RESTful 实践进行思考。我觉得我已经把自己写成一个结,可以使用一些指导。
我的场景是这样的:用户想要创建一个包含 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 时,我的所有项目都没有 ID。数据库分配 ID,但 Backbone 不会隐式更新该信息,因为我保存的是集合而不是模型。因此,一旦保存成功,我就会在我的播放列表上调用 fetch 来检索更新的信息。这很糟糕,因为播放列表中可能包含数千个项目——我不想每次保存多个项目时都获取数千个项目。
所以,我在想也许我需要重写集合的解析方法并将服务器的响应手动映射回集合。
这一切似乎......矫枉过正/错误。我在做一些架构上不正确的事情吗?RESTful 架构如何处理这样的场景?