【发布时间】:2012-06-18 21:39:11
【问题描述】:
我有一个 JSON 文件,它将创建我的 ParentModel 并填充子 Records 集合。
ParentModel : Backbone.Model.extend({
initialize: function() {
this.set({ records: new Records(this.get("records")) });
}
});
Records 集合只是映射到 Record 模型的基本 Backbone 集合。
问题是我需要孩子知道父级,所以每个Record 模型必须有一个父级属性。所以现在我只是将它添加到初始化方法的底部:
var self = this;
this.get("records").each(function(record) {
record.set("parent", self);
});
这很好用,但是当我创建新记录时,我宁愿不必记住包含这 4 行。
This answer 说我可以重写initialize 方法来接收额外的参数,但我不太确定如何让Backbone 自动将ParentModel 传递给重写的initialize 方法。谁能提供一个例子来说明如何做到这一点?
我听说过Backbone-relational,它可能会帮助我做我想做的事,但还要包含 23kb。如果这是更好的方法,我会考虑实施它,但如果有可用的解决方案,我更喜欢更简单的解决方案。
无论我是通过代码创建一个新的ParentModel 记录,还是它是由 JSON 提要自动创建的,这都需要工作。
【问题讨论】:
-
我发布了一个解决方案,但在重读您的问题后,我意识到这不是您要寻找的答案。我认为没有一种解决方案不会增加代码的复杂性。但如果你真的想这样做,我认为最好的覆盖位置是 Records 集合;重写 initialize 以检查并设置父选项,然后使用 add 函数为您添加到集合中的每个新模型设置父级。
-
@Brandon 希望将记录添加到集合中。每个模型现在都有一个
collection属性,可以使用model.collection访问可能这个提示会帮助你 -
@AnthonyChua,这在通过代码添加新记录时会起作用,但是如何确保在从 JSON 提要填充模型时使用覆盖的初始化方法?
-
@Brandon 如果您通过通常的
fetch()调用填充集合,则集合实际上只是调用reset或add函数,具体取决于您传递的选项。即使collection.fetch默认调用reset,reset仍将使用add来填充集合。 -
你能解释一下为什么你需要在每个
Record模型中引用Records集合吗?这看起来很奇怪。
标签: backbone.js