Backbone从model1属性继承model2属性

时间:2013-07-17 04:15:27

标签: backbone.js underscore.js

我有一个模特和集合

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

2 个答案:

答案 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}