我有一个JSON文件,该文件将创建我的ParentModel
以及填充孩子Records
集。
ParentModel : Backbone.Model.extend({
initialize: function() {
this.set({ records: new Records(this.get("records")) });
}
});
而唱片收藏是只是一个基本的骨干集合映射到一个记录模式。
问题是我需要的孩子了解父母,所以每个Record
模式有可能对之父属性。 所以现在我刚刚加入这初始化方法的底部:
var self = this;
this.get("records").each(function(record) {
record.set("parent", self);
});
这工作得很好,但是当我创建一个新的记录,我宁愿不记得要包括这4条线。
这个回答说,我可以重写初始化方法采取额外的参数,但我不能肯定我将如何让骨干在ParentModel自动传递到重写initialize方法。 任何人都可以提供关于如何做到这一点的例子吗?
我听说过的骨干关系可能帮助做我想做的,但这是另一个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'));
});
和小提琴http://jsfiddle.net/sPXaZ/
只是要清楚,这里是你需要一个( 可以在问题的评论被找到 )的摘要:
例如,如果我想中心位置记录元素,我需要知道视框有多宽。 要知道,唯一的办法就是要知道最宽的记录元素是什么。 父对象可以是通过其子元素排序告诉我。
在我看来,你的模型必须处理显示问题; 在骨干显示由浏览处理。 所以,我想你可以创建一个视图,其听双方ParentModel
和Records
。
var RecordView = Backbone.View.extend({
initialize: function() {
this.collection.on('sync', this.render, this);
}
render: function() {
var widest = this.model.get('width');
}
});
var view = new RecordView({model: ParentModel, collection: Records});
而且,在我看来,这不是给ParentModel
来处理它需要在屏幕上,但它自己的视图宽度。 这里引入两个意见似乎是一点。
但是我还没有完整的图片,所以,请,如果我错了,给我你想要做什么更多的样品。