Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果我需要保存一个主干,这是一种代码气味吗?_Javascript_Rest_Backbone.js - Fatal编程技术网

Javascript 如果我需要保存一个主干,这是一种代码气味吗?

Javascript 如果我需要保存一个主干,这是一种代码气味吗?,javascript,rest,backbone.js,Javascript,Rest,Backbone.js,在使用BackboneJS时,我一直在努力学习最好的RESTful实践。我觉得我把自己写得有点纠结,需要一些指导 我的场景是这样的:一个用户想要创建一个包含N个项目的新播放列表。N个项目的数据来自第三方API,共有50个项目。因此,我想添加一个新的空播放列表,当50个播放列表出现时,保存项目并添加到我的播放列表中 这导致我的播放列表模型有一个方法addItems,它看起来像: addItems: function (videos, callback) { var itemsToSave

在使用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,但主干不会隐式更新该信息,因为我保存的是集合而不是模型。因此,一旦保存成功,我就调用播放列表上的fetch来检索更新的信息。这很糟糕,因为一个播放列表中可能有数千个项目——我不希望每次保存多个项目时都会获取数千个项目

因此,我想也许我需要重写集合的解析方法,并手动将服务器的响应映射回集合


这一切似乎。。。过分/错误。我是否在做架构上不正确的事情?RESTful架构是如何处理这种情况的?

我的观点是,做那些能工作且感觉足够干净的事情,而忽略RESTafarians的信任可能是什么。批量创建、批量更新、批量删除都是真实世界的用例,其他人只是闭上眼睛假装不存在。在我看来,这似乎是合理的第一次尝试:

  • 创建一个
    bulkAdd
    方法,如果您有信心,请仔细重写
    add
  • 不过,不要制作模型或将其添加到集合中
  • 执行批量发布或其他操作,将它们放入数据库并取回分配的ID
  • 然后将它们作为模型添加到集合中