2013-01-05 8 views

Antwort

21

Wenn Sie die Vorlage "Lenker" rendern, müssen Sie die Attribute des Modells übergeben. Die empfohlene Vorgehensweise ist das Aufrufen von Model.toJSON, das eine Kopie des internen attributes-Hashwerts des Modells zurückgibt.

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

In der Vorlage können Sie den Kontext über den Namen der Eigenschaft zugreifen.

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

Got:

{{ user.address.street }} 

Wird als analysiert werden. Die Idee besteht also darin, JSON anstelle von Backbone-Modellen der Vorlage auszusetzen. –

+3

@AkshayRawat, 'Model.toJSON' wird ein bisschen komisch genannt, denn was es zurückgibt, ist nicht wirklich JSON, nur ein normales Javascript-Objekt. Wenn Sie eigentlich JSON wollten, müssten Sie 'JSON.stringify (model.toJSON())' aufrufen - aber was Lenker benötigt, ist ein normales Objekt. – jevakallio

+0

Der 'toJSON'-Name ist nicht wirklich Backbones Fehler, der Name wird durch [' JSON.stringify'] (https://developer.mozilla.org/en-US/docs/JSON#toJSON() _method) angegeben. –

6

Eigentlich habe ich so viele Orte mit .toJSON so habe ich einen Lenker Modifikation entwickelt Backbone Modelle zu handhaben:

https://gist.github.com/4710958

Es prüft, ob ein Wert Instanz von Backbone ist. Modell und wenn dies der Fall ist, wird die Methode .get() aufgerufen.

Backbone.Model sollte global sein, um es zu verwenden.

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

Funktioniert das immer noch mit HandleBars v1.3.0? Ich habe dein Snippet in meine App.js eingefügt, aber es scheint nichts zu tun. – ddewaele

+0

Entschuldigung, ich benutze keinen Lenker mehr, also weiß ich nicht. Siehst du einen Fehler auf der Konsole? Wenn Sie dies tun, können wir darüber unter https://gist.github.com/amatiasq/4710958 weiter reden –

Verwandte Themen