2011-06-28 24 views
9

我有一個定義了一些默認值的類和一個定義了一些默認值的子類。但是,當我創建一個子類的實例時,它只會查看本地默認值,並且不會將其默認值與父類的默認值合併。有沒有簡單的方法來做到這一點,而不是明確地將本地默認值與每個子類的initialize函數中的父級默認值合併?在Backbone.js我怎麼能得到模型超類默認作爲默認的子類?

var Inventory = Backbone.Model.extend({ 
    defaults: { 
     cat: 3, 
     dog: 5 
    } 
}); 

var ExtendedInventory = Inventory.extend({ 
    defaults: { 
     rabbit: 25 
    } 
}); 

var ei = new ExtendedInventory({}); 
console.log(ei.attributes); 

此輸出:

{rabbit: 25} 

不是我想要的:

{cat: 3, dog: 5, rabbit: 25} 

回答

7

你不能那樣做。您必須在子類

_.extend(ExtendedInventory.prototype.defaults, {rabbit: 25}); 

之後執行此操作。將此放在模型定義之後。

+1

同樣適用於查看事件屬性。 – Julien

+1

請參閱[this](http://stackoverflow.com/questions/6549149/extending-the-defaults-of-a-model-superclass-in-backbone-js)關於如何更改庫存的討論的問題。 prototype.defaults以及ExtendedInventory.prototype.defaults,因爲它們是相同的對象引用。 – c3rin

+0

你是對的。 – Julien