2012-03-08 1 views
14

In spina dorsale sembra che devo andare via modello attribuisce model.get('att_name')Come arrivare modello dorsale attributi senza .get

avrei prever per ottenere loro la strada che avrei avuto qualsiasi settore pubblico all'interno di un oggetto: model.att_name

Qualcuno può pensare a un modo per aggirare questo?

ad esempio: Nel mondo python vorrei ignorare getattr sul modello di qualcosa di simile:

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

Oh, e sto usando CoffeeScript

risposta

17

modello che si utilizza get() e set() o defaults per ottenere/set sono memorizzati nell'attributo instance.attributes.

Inoltre, questi sono gli attributi che verranno passati e restituiti da sync() e toJSON(). Pertanto, quando si fetch(), save(), viene trasferito solo ciò che viene memorizzato in instance.attributes.

Niente ti impedirà naturalmente di avere attributi normali come instance.foo sui tuoi oggetti. Se si desidera trattarli come gli altri attributi e trasferirli su fetch() e save(), è possibile farlo fornendo un modello personalizzato parse() sul modello che per impostazione predefinita non fa nulla. Detto questo, dovresti farlo solo se lo ritieni assolutamente necessario, se non altro per rispettare le convenzioni Backbone.

+0

E se avessi fatto qualcosa di simile in fase di inizializzazione: 'per att in @attributes: @ [att] =() -> @ get (att)'? –

+1

Mi spiace, ma non parlo di coffescript. I * guess * che significa questo [attr] = this.get (attr). Ciò non intercetterà ulteriori manipolazioni degli attributi tramite la sincronizzazione, impostata. Inoltre ti darà solo getter, ma non setter. – ggozad

+0

Ah scusa, equiv è questo: 'this [att] = function() {this.get (att)}' ... quindi potrei fare 'model.get ('att')' tramite 'model.att() "... non è l'ideale, ma spero che tu possa dirmi se questo interromperà le funzionalità di Backbone. E grazie btw. –

4

Gli attributi sono accessibili a Model.attributes. Puoi leggere direttamente da questo, ma usa set per cambiarli. Puoi anche ottenere una rappresentazione di tutti i tuoi attributi da Model.toJSON() (nota:toJSON() in realtà non restituisce JSON, ma un oggetto javascript).

Il metodo consigliato è quello di utilizzare toJSON() per i modelli, la serializzazione ecc

1

Non c'è via intorno a questo, davvero. Potresti usare model.attributes.att_name, ma probabilmente non è quello che vuoi.

JavaScript non ha (almeno non in tutti i browser) la possibilità di reindirizzare l'accesso delle proprietà. attribuisce