我有一个带有3个模型的Backbone App,它有嵌套集合:
模型结构:
Layout extends Backbone.Model
-> sections: new Sections extends Backbone.Collection
Section extends Backbone.Model
-> rows: new Rows extends Backbone.Collection
现在,如果我在布局中有两个剖面模型,并且我将行模型添加到其中一个Section.rows集合中,则会将它添加到两个剖面中。
顺便说一句,我是从一个事件的视角添加它。
先谢谢。
答案 0 :(得分:0)
得到了解决方法。我可以通过向我的模型添加默认属性来重现您的工作流程。
像这样:var Section = Backbone.Model.extend({
defaults: {
rows: new Rows
}
});
var Layout = Backbone.Model.extend({
defaults: {
sections: new Sections
}
});
然后真的,如果我将新行添加到我的某个部分的行中,它似乎会添加到所有部分的行集合中。所以我这样做(粗鲁的例子):
var Row = Backbone.Model.extend({
defaults: {
rowData: 0
}
});
var Rows = Backbone.Collection.extend({
model: Row
});
var Section = Backbone.Model.extend({
//defaults: {
// rows: new Rows
//}
});
var Sections = Backbone.Collection.extend({
model: Section
});
var Layout = Backbone.Model.extend({
//defaults: {
// sections: new Sections
//}
});
var LayoutView = Backbone.View.extend({
});
var lView = new LayoutView({ model: new Layout });
lView.model.set('sections',new Sections());
var sections = lView.model.get('sections');
sections.add({id: 1, name: 's1',rows: new Rows() });
sections.add({id: 2, name: 's2',rows: new Rows() })
var rows = sections.get(1).get('rows');
rows.add({id:'r1',rowsData: 10});
console.log(lView.model.toJSON());
答案 1 :(得分:0)
@aleha你是对的,问题是Model中的默认属性设置。因为它们共享相同的备忘录空间(javascript:通过引用而不是通过值传递)。
所以我所做的就是初始化函数
initialize: function() {
this.set( 'rows', new Rows() );
}
所以,不需要像上面那样做:
sections.add({id: 1, name: 's1',rows: new Rows() });
因此解决并自动化:)
感谢您的帮助。