2012-06-29 69 views
1

属性,如果我有这种模式:继承骨干从父模型

var myParentModel = Backbone.Model.extend({ 
    defaults:{ parent1: null, 
       parent2: null} 
)}; 

,我有另一种模式:

var myModel = myParentModel.extend({ 
    defaults: {child1: null, 
       child2: null} 
)}; 

,如果我实例化一个新的基于myModel:

var mymodel = new myModel({child1: 'mychild1'}); 

在属性属性我只设置为默认的child2属性,实现如何继承paren的父项属性t模型?

回答

3

在github上有一个interesting post这个问题,我是实施该解决方案是这样的:

myModel.prototype.defaults = 
    _.extend({ 
     child1: null, 
       child2: null 
    }, myParentModel.prototype.defaults, 
     myModel.prototype.defaults); 

以下划线功能:扩展,我们与家长和孩子原型的新对象的默认值,这是一个多好的解决方案继承

2

我用这个,在这一点上并不需要,如果你是在同一范围内使用原型:

var abstractDefaults = { 
    parent1 : '', 
    parent2 : '' 
}; 
var MyParentModel = Backbone.Model.extend({ 
    defaults: abstractDefaults 
}); 
var MyModel = Backbone.Model.extend({ 
    defaults: _.extend(abstractDefaults, { 
    child1 : '', 
    child2 : '' 
    }) 
}); 
console.log(new MyModel().toJSON()); 
+0

如果您有多个子模型,后面的孩子将继承早期孩子的属性,这是不可取的。 – codingpuss

2

我真的建议使用功能来扩展默认属性是这样的:

var MyParentModel = Backbone.Model.extend({ 
    defaults: { 
     parent1 : '', 
     parent2 : '' 
    } 
}); 
var MyModel = MyParentModel.extend({ 
    defaults: function() { 
     return _.extend(
      { 
       child1 : '', 
       child2 : '' 
      }, 
      MyParentModel.prototype.defaults 
     ); 
    } 
}); 

的原因是,你会避免一些麻烦与共享引用您的不同MyModel对象的实例之间的新的默认属性

为了更清楚地说明,如果您的默认属性包含数组,并且如果多次实例化您的MyModel,则包含数组的属性将在每个实例之间共享。使用函数声明默认属性将避免它。

我希望我很清楚。