2013-01-05 22 views

risposta

21

Quando si esegue il rendering del modello di Handlebars, è necessario passare gli attributi del modello. Il modo consigliato per farlo è chiamare lo Model.toJSON, che restituisce una copia dell'hash interno attributes del modello.

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

Nel modello è possibile accedere al contesto tramite il nome della proprietà.

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

ottenuto. Quindi l'idea è di esporre JSON al modello invece dei modelli Backbone. –

+3

@AkshayRawat, 'Model.toJSON' ha un nome un po 'divertente, perché ciò che restituisce non è in realtà JSON, ma solo un normale oggetto javascript. Se si desidera un vero JSON, si dovrà chiamare 'JSON.stringify (model.toJSON())' - ma quello che Handlebars vuole è un oggetto normale. – jevakallio

+0

Il nome 'toJSON' non è in realtà l'errore di Backbone, il nome è specificato da [' JSON.stringify'] (https://developer.mozilla.org/en-US/docs/JSON#toJSON() _method). –

6

In realtà ho così tanti posti con .toJSON così ho sviluppato una modifica manubrio per gestire modelle Backbone:

https://gist.github.com/4710958

esso controllerà se un valore è istanza di Backbone. Modella e se lo è invocherà il metodo .get().

Backbone.Model deve essere globale per poter essere utilizzato.

{{ user.address.street }} 

sarà analizzata come:

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

Funziona ancora con HandleBars v1.3.0? Ho inserito il tuo snippet nella mia app.js ma non sembra che faccia nulla. – ddewaele

+0

Spiacente, non uso più Manubri quindi non lo so. Vedi qualche errore sulla console? Se lo fai, possiamo continuare a parlarne all'indirizzo https://gist.github.com/amatiasq/4710958 –

Problemi correlati