2011-06-28 9 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

sameは、viewsイベント属性に適用されます。 – 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

関連する問題