2012-06-29 71 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,則包含數組的屬性將在每個實例之間共享。使用函數聲明默認屬性將避免它。

我希望我很清楚。