1

我有一种感觉,我在这方面做得很糟糕。我想通过我的 Backbone Collection 从我的服务器获取和合并模型。我在我的集​​合中对 fetch 进行了子类化,以为此特定集合添加一些自定义逻辑。

     fetch: function (options) {
        var opts = options || {};
        this.url = this.makeURL(opts);

        if (opts.reset) {
            this.refresh();
        } else if (this.finished) {
            return;
        }

        if (this.models.length && this.models[0].get("model_id")) {
            opts["remove"] = false;
            opts["merge"] = true;
        }

        opts["data"] = opts["data"] || {};
        opts["data"]["page"] = this.page;
        opts["data"]["status"] = opts.statusChange;
        opts["data"]["tags"] = opts.tags;
        opts["success"] = _.bind(this.triggerFetched, this);
        Backbone.Collection.prototype.fetch.call(this, opts);
    },

这是if (this.models.length && this.models[0].get("model_id"))我觉得我做的很糟糕的地方。

我的收藏正在重置所有提取,所以我查看了主干代码,看来我必须remove=false在我的提取选项中进行设置。在线骨干文档似乎建议我可以设置add=true或设置reset=falsefetch 选项以防止集合重置。出于某种原因,只有将 remove 设置为 false 似乎对我有用,不确定这是否是因为子类化。

我正在检查 attr model_id,因为似乎 Collections 在初始化时最初自己调用 fetch 并将某种对象(我相信另一个集合)设置为最初的第一个模型。这很奇怪,我发现寻找像这样明确添加的模型之一可以解决问题。

我也不确定是否应该明确地将合并设置为 true。

谢谢

4

0 回答 0