我有一个模特和集合
Model1 = Backbone.Model.extend();
Model2 = Backbone.Model.extend({
defaults: {
code:'',
m1_id: ?????, // this part should get the Model1 "id" attribute
id: '' // e.g. the value of m1.get('id');
}
});
C = Backbone.Collection.extend({
model: Model2
});
并制作每个
的实例var m1 = new Model1();
var m2 = new Model2();
var c = new C();
并设置值
m1.set({'code':'0001', 'type': 'O', id: 1});
c.add({'code':'sample1', 'id':1}); // note: i did not set the m1_id
c.add({'code':'sample2', 'id':2});
但是内部集合中的模型获得Model1 id attrtibute,类似于
收藏必须有这个
c.at(0).toJSON();
-> {'code':'sample1', 'm1_id': 1, id: 1} // note: the "m1_id" value is
c.at(1).toJSON(); // from Model1 "id" attribute
-> {'code':'sample2', 'm1_id': 1, id: 2}
如何从Model1属性中自动设置Collection内的Model2属性..谢谢!
答案 0 :(得分:3)
首先,您的代码存在问题:
var m1,m2和c应使用关键字调用:new来实例化模型和集合
e.g。 var m1 = new Model1()
要添加到集合中的代码(c.add)也缺少结束大括号
c.add({'code':'sample1'); // should be c.add({code:"sample1"});
您的代码和问题对我来说并不完全清楚,但我怀疑您可能正在尝试将具有相同ID的模型添加到您的集合中。根据主干文档,不会将具有相同ID的多个模型添加到您的集合中:
请注意,将相同的模型(具有相同ID的模型)添加到a 不止一次收集是一种无操作。
如果你需要从另一个模型传递id,你需要设置另一个属性,就像你将“parent_id”传递给你的集合一样。
例如
var temp_id = m1.get('id');
c.add({code:"sample3", id:temp_id});
答案 1 :(得分:0)
Model1 = Backbone.Model.extend();
var m1 = new Model1();
Model2 = Backbone.Model.extend({
defaults: {
code:'',
m1_id: '',
id: ''
}
});
var m2 = new Model2();
C = Backbone.Collection.extend({
model: Model2,
initialize: function(){
this.on('add', this.onAddModel, this);
},
onAddModel: function(model){
model.set({'m1_id': m1.get('id')});
}
});
var c = new C();
m1.set({'code':'0001', 'type': 'O', id: 1});
c.add({'code':'sample1', 'id':1}); // trigger the c.onAddModel function
c.at(0).toJSON();
-> {'code':'sample1', 'm1_id': 1, id: 1}