2012-03-08 13 views
14

En columna vertebral parece que tengo que conseguir a través de los atributos de modelo model.get('att_name')Como llegar modelo de columna vertebral sin .get

Me Prever para conseguir que la forma en que tendría cualquier ámbito público dentro de un objeto: model.att_name

¿Alguien puede pensar en una forma de evitar esto?

por ejemplo: En el mundo pitón Me anular getattr en el modelo de algo como esto:

def getattr(self, att): 
    return self.get(att) 

Ah, y estoy usando CoffeeScript

Respuesta

17

modelo que utilice get() y set() o defaults para obtener/juego se almacenan en el atributo instance.attributes.

Además, estos son los atributos que se van a pasar y devolver desde sync(), así como toJSON(). Por eso, cuando fetch(), save() etc., solo se transfiere lo que está almacenado en instance.attributes.

Nada le impedirá, por supuesto, tener atributos normales como instance.foo en sus objetos. Si desea tratar esos como los otros atributos y pasarlos a fetch() y save(), puede hacerlo proporcionando un parse() personalizado en su modelo, que de forma predeterminada no hace nada. Dicho esto, solo debes hacer esto si realmente lo consideras absolutamente necesario, solo para cumplir con las convenciones de Backbone.

+0

¿Qué sucede si hago algo como esto en initialize: 'para att en @attributes: @ [att] =() -> @ get (att)'? –

+1

Lo siento, pero no hablo coffescript. I * supongo * que significa esto [attr] = this.get (attr). Eso no interceptará ninguna manipulación de atributo adicional a través de sincronización, establecer. Además, solo le dará captadores, pero no setters. – ggozad

+0

Ah, lo siento, equiv es esto: 'this [att] = function() {this.get (att)}' ... así que podría hacer 'model.get ('att')' a través de 'model.att() '... no es ideal, pero espero que puedas decirme si esto romperá cualquiera de las funciones de Backbone. Y gracias por cierto. –

4

Los atributos son accesibles en Model.attributes. Puede leer directamente de eso, pero use set para cambiarlos. También puede obtener una representación de todos sus atributos en Model.toJSON() (nota:toJSON() en realidad no devuelve JSON, sino un objeto javascript).

El método recomendado es utilizar toJSON() para las plantillas, etc. serialización

1

No hay distancia alrededor de esto, realmente. Puede usar model.attributes.att_name, pero probablemente no es lo que quiere.

JavaScript no tiene (al menos no en todos los navegadores) la posibilidad de redirigir el acceso a las propiedades. atribuye

Cuestiones relacionadas