2011-06-28 5 views
9

Tengo una clase que define algunos valores predeterminados y una subclase que define algunos valores predeterminados. Pero cuando creo una instancia de la subclase, solo mira los valores predeterminados locales y no combina sus valores predeterminados con los del padre. ¿Hay alguna manera simple de hacer esto sin combinar explícitamente los valores predeterminados locales con los valores predeterminados principales en la función initialize de cada subclase?En Backbone.js, ¿cómo puedo obtener los valores predeterminados de las superclases modelo para que actúen como valores predeterminados para las subclases?

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); 

Este salidas:

{rabbit: 25} 

No es lo que quieren:

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

Respuesta

7

No se puede hacer así. Tendrá que hacerlo después de la subclase

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

Ponga esto después de la definición de su modelo.

+1

Lo mismo se aplica a los atributos de eventos de vistas. – Julien

+1

Consulte [este] (http://stackoverflow.com/questions/6549149/extendiendo-el-defaults-de-un-modelo-superclass-in-backbone-js) pregunta para una discusión sobre cómo esta respuesta cambia el Inventario. prototype.defaults así como ExtendedInventory.prototype.defaults porque son la misma referencia de objeto. – c3rin

+0

Estás en lo cierto, buena captura. – Julien

Cuestiones relacionadas