2013-01-05 11 views

Odpowiedz

21

Po wyrenderowaniu szablonu Handlebars należy podać atrybuty modelu. Zalecanym sposobem wykonania tej czynności jest wywołanie Model.toJSON, która zwraca kopię wewnętrznego skrótu modelu attributes.

var template = Handlebars.compile(templateHtml); 
var rendered = template({ person: model.toJSON() }); 

W szablonie można uzyskać dostęp do kontekstu za pomocą nazwy właściwości.

<span>{{person.firstName}} {{person.lastName}}</span> 
+0

Rozumiem. Chodzi o to, aby wystawić JSON na szablon zamiast na modele szkieletowe. –

+3

@AkshayRawat, 'Model.toJSON' nazywa się nieco funnily, ponieważ to, co zwraca, nie jest tak naprawdę JSON, tylko normalny obiekt javascript. Jeśli chciałbyś mieć rzeczywisty JSON, musiałbyś wywołać 'JSON.stringify (model.toJSON())' - ale to, czego chce Handlebars, jest normalnym obiektem. – jevakallio

+0

Nazwa 'toJSON' nie jest tak naprawdę winą Backbone, nazwa jest określona przez [' JSON.stringify'] (https://developer.mozilla.org/en-US/docs/JSON#toJSON() _method). –

6

Właściwie mam tak wiele miejsc z .toJSON więc stworzyliśmy modyfikacji kierownicy do obsługi szkieletową modele:

https://gist.github.com/4710958

ona sprawdzi, czy wartość nie jest instancją Backbone. Model i jeśli jest, wywoła metodę .get().

Backbone.Model powinien być globalny, aby z niego korzystać.

{{ user.address.street }} 

Będzie analizowany jako:

user.get("adress").street 
+0

Czy to nadal działa z HandleBars v1.3.0? Umieściłem Twój fragment w moim app.js, ale wydaje się, że nic nie robi. – ddewaele

+0

Niestety, nie używam już kierownic, więc nie wiem. Czy widzisz jakiś błąd na konsoli? Jeśli tak, możemy dalej o tym mówić na https://gist.github.com/amatiasq/4710958 –

Powiązane problemy