gpt4 book ai didi

backbone.js - 在 Backbone 中设置父属性的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 22:38:28 24 4
gpt4 key购买 nike

我有一个 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 提要自动创建,这都需要起作用。

最佳答案

我通常发现将结构元素移出属性更清晰,因此我的记录和父属性位于对象上,而不是属性上。也就是说,您可以利用集合和父对象上的不同事件:

var ParentModel = Backbone.Model.extend({
initialize: function () {
_.bindAll(this, 'adoptOne', 'adoptAll');
this.records = new Records();

this.on('change:records', function () {
this.records.reset(this.get('records'));
});
this.records.on('reset', this.adoptAll);
this.records.on('add', this.adoptOne);

this.records.reset(this.get('records'));
},

adoptAll: function () {
this.records.each(this.adoptOne);
},
adoptOne: function (model) {
model.parent = this;
}
});

一些测试:

var p = new ParentModel({
name: "I am the parent",
records: [{id: 1}, {id: 2}]
});

p.records.add({id: 3});

p.records.each(function (child) {
console.log(child.get('id')+' '+child.parent.get('name'));
});

p.set({records: [{id: 4}]});

p.records.each(function (child) {
console.log(child.get('id')+' '+child.parent.get('name'));
});

还有一把 fiddle http://jsfiddle.net/sPXaZ/

关于backbone.js - 在 Backbone 中设置父属性的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11091485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com