Backbone.js のモデルスーパークラスのデフォルトを拡張する 質問する

Backbone.js のモデルスーパークラスのデフォルトを拡張する 質問する

私はこれを質問として提起したい。これ答えたいのですが、答えられないようです。申し訳ありません。

サブクラスのデフォルトを拡張すると、スーパークラスに反映されます。これでは目的が達成されないようで、探している構造を得るためには、サブクラスでスーパークラスのデフォルトを明示的にリストする方が適切です。

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

var ExtendedInventory = Inventory.extend({
});

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

var i = new Inventory();
var ei = new ExtendedInventory();
console.log(i.attributes);
console.log(ei.attributes);

出力は次のようになります:

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

私が(そしておそらく、オプ) 欲しい:

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

ベストアンサー1

問題は、参照をオーバーライドしていないため、Inventory.prototype.defaultsと が同じ参照を持つことです。Extended.prototype.defaults

つまり、これを 2 つの方法で実行できます。おそらくもっと多くの方法があると思いますが、私が見つけたのは次の 2 つだけです。

編集:最初の例は間違っています (コメントを参照)。2 番目の例を参照してください。

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

_.extend(ExtendedInventory.prototype.defaults, Inventory.prototype.defaults);

または

var ExtendedInventory = Inventory.extend({
    defaults: _.extend({},Inventory.prototype.defaults,
         {rabit:25}
    )
});

最初のほうがきれいに見えると思います。

おすすめ記事