Immaginate un semplice modello di spina dorsale comeBackbone.js - setter personalizzati
window.model= Backbone.Model.extend({
defaults:{
name: "",
date: new Date().valueOf()
}
})
Sto cercando di trovare un modo per rendere sempre il negozio modello il nome in lettere minuscole, indipendentemente dell'input fornito. Ad esempio,
model.set({name: "AbCd"})
model.get("name") // prints "AbCd" = current behavior
model.get("name") // print "abcd" = required behavior
Qual è il modo migliore per farlo? Ecco tutto quello che riuscivo a pensare:
- l'override del metodo "set"
- Utilizzare un "SantizedModel" che attenda le modifiche su questo modello di base e memorizza gli ingressi igienizzati. Il codice di visualizzazione di tutti verrà quindi passato a questo modello igienizzato.
La specifica "in minuscolo" esempio ho citato può tecnicamente essere più efficacemente dalla vista durante il recupero, ma immaginare un diverso caso in cui, ad esempio, l'utente inserisce valori in sterline e voglio solo memorizzare valori in $ s nel mio database. Potrebbero esserci anche viste diverse per lo stesso modello e non voglio dover fare un "toLowerCase" ovunque sia usato.
Pensieri?
Grazie. Ho preso in considerazione anche questo, ma questo sembrava essere un passo indietro in termini di renderlo leggibile: ignorare la funzione set o aggiungere una nuova funzione "setProperty" che lo imposta in minuscolo e quindi lo passa nel set backbone potrebbe essere migliore. A meno che mi manchi qualcosa? – Naren
Non c'è sicuramente niente di sbagliato nell'override del metodo 'set' per fare ciò che è necessario per fare ... qualche pre-elaborazione prima del set? Potresti anche considerare di estendere 'Backbone.Model.prototype.set' per chiamare alcuni pre-processori se corrispondono ... qualcosa del genere: https://gist.github.com/1310972 –
convalida viene chiamato solo per il metodo di salvataggio o se options.validate = true è impostato. (silenzioso non è usato qui, ma la risposta è piuttosto vecchia) – webstrap