Wyobraźmy sobie prosty model szkieletu jakbackbone.js - niestandardowe ustawiaczy
window.model= Backbone.Model.extend({
defaults:{
name: "",
date: new Date().valueOf()
}
})
Staram się znaleźć sposób, aby zawsze sprawiają sklepu modelu nazwę małymi literami, niezależnie od wejścia do tego celu. tj.,
model.set({name: "AbCd"})
model.get("name") // prints "AbCd" = current behavior
model.get("name") // print "abcd" = required behavior
Jaki jest najlepszy sposób na zrobienie tego? Oto wszystko, co mogłem myśleć:
- przesłonić „zestaw” metoda
- Użyj „SantizedModel”, który wykrywa zmiany w tym modelu bazowego i przechowuje odkażane wejść. Cały kod widoku zostanie wówczas przekazany temu odkażanemu modelowi.
Specyficzny „do małymi literami” przykład mówiłem technicznie może być lepiej obsługiwane przez widoku podczas pobierania, ale wyobrazić sobie inny przypadek, w którym, na przykład, użytkownik wprowadza wartości w funtach i chcę tylko do przechowywania wartości w $ s w mojej bazie danych. Mogą istnieć różne widoki tego samego modelu i nie chcę robić "toLowerCase" wszędzie, gdzie jest używany.
Myśli?
Dzięki. Rozważałem to również, ale wydawało się to krokiem wstecz, jeśli chodzi o nadawanie mu czytelności - przesłonięcie ustawionej funkcji lub dodanie nowej funkcji "setProperty", która ustawia ją małymi literami, a następnie przekazuje ją do zestawu szkieletowego, może być lepsza. Chyba że czegoś mi brakuje? – Naren
Z pewnością nie ma nic złego w przesłonięciu metody "set", aby zrobić to, co trzeba zrobić ... trochę wstępnego przetwarzania przed zbiorem? Możesz nawet rozważyć rozszerzenie 'Backbone.Model.prototype.set', aby zadzwonić do niektórych preprocesorów, jeśli pasują ... coś takiego: https://gist.github.com/1310972 –
sprawdzanie poprawności jest wywoływane tylko dla metody zapisu lub jeśli ustawione jest options.validate = true. (cichy nie jest tutaj używany, ale odpowiedź jest dość stara) – webstrap