1

我有模型和收藏

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 属性,例如

收藏品必须有这个

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 属性。谢谢!

4

2 回答 2

3

首先,您的代码有一些问题:

var m1、m2 和 c 应使用关键字调用:new 以实例化您的模型和集合

例如var m1 = new Model1()

您要添加到您的集合(c.add)的代码也缺少右花括号

c.add({'code':'sample1'); // should be c.add({code:"sample1"});

您的代码和问题对我来说并不完全清楚,但我怀疑您可能正在尝试将具有相同 ID 的模型添加到您的集合中。根据主干文档,相同 id 的多个模型不会添加到您的集合中:

请注意,将相同的模型(具有相同 id 的模型)多次添加到集合中是无操作的。

如果您需要从另一个模型传递 id,则需要设置另一个属性,例如将“parent_id”传递给您的集合。

例如 var temp_id = m1.get('id'); c.add({code:"sample3", id:temp_id});

于 2013-07-17T04:57:25.930 回答
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}
于 2013-07-19T03:24:08.513 回答