我有一种感觉,我在这方面做得很糟糕。我想通过我的 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=false
fetch 选项以防止集合重置。出于某种原因,只有将 remove 设置为 false 似乎对我有用,不确定这是否是因为子类化。
我正在检查 attr model_id,因为似乎 Collections 在初始化时最初自己调用 fetch 并将某种对象(我相信另一个集合)设置为最初的第一个模型。这很奇怪,我发现寻找像这样明确添加的模型之一可以解决问题。
我也不确定是否应该明确地将合并设置为 true。
谢谢