Najlepszym sposobem, aby to zrobić jest dodanie do tego modelu:
function initialize() {
this.set("calculatedColumn", function() { return this.otherColumn; });
}
Model kręgosłup normalnie zapamiętuje wartości rzeczywiste dane wewnętrznie w "model.attributes". Dlatego kiedy przekazujesz model bezpośrednio do szablonu, ma on tylko funkcje dodane bezpośrednio do modelu, a nie dane. A jeśli użyjesz metody model.toJSON(), zwykle jest ona implementowana w szkielecie jako _.clone (model.attributes) (patrz backbone.js). Masz więc dane, a nie funkcje dodane bezpośrednio do modelu. Dlatego powyższe działa - ustawiasz funkcję na model.attributes, a nie na samym obiekcie modelu. Nie odwołuj się bezpośrednio do pliku model.attributes, użyj modelu.get ("calculColumn") i model.set ("calculColumn", ...).
Model.get ("calculColumn") zwraca funkcję. Jeśli podążasz {{calculcolumn}} w kierownicy (zakładając, że używasz kierownicy), pokazuje ona wartość zwróconą przez funkcję. Ale obliczona kolumna nie zostanie wysłana do serwera, ponieważ szkielet wykonuje synchronizację JSON.stringify z model.toJSON (w backbone.js) i JSON.stringify ignoruje funkcje. Jeśli chcesz, aby funkcja JSON.stringify nie ignorowała funkcji (tak, aby funkcja była przekształcana w wartość danych, ilekroć JSON jest uruchamiany w modelu - podczas wyświetlania widoku i synchronizacji modelu), przesłonić model.toJSON tak, jak opisano @Derick Bailey.
Można również wyprowadzić własny model bazowy z Backbone.Model i zastąpić .toJSON i wyprowadzić wszystkie modele z BaseModel, jeśli zajdzie taka potrzeba. Wtedy potrzebowalibyśmy ogólnej wersji .toJSON, którą można zastosować do dowolnego modelu.
Myślę, że problem ma związek ze sposobem Mijam modelu do szablonu. – Juanma