2013-01-05 7 views
10

となります。通常、そのアクセスはperson.get('firstName')person.get('lastName')のようになります。ハンドルバーテンプレートのバックボーンモデルプロパティにアクセスする方法<code>Person</code>と呼ばれるバックボーンモデルがある場合は、<code>firstName</code>、<code>lastName</code>という名前のバックボーンモデルがある場合は、

ハンドルバーテンプレートでは、personがコンテキストに公開されている場合、同様のことを行うにはどうすればよいですか。

答えて

21

ハンドルバーテンプレートをレンダリングするときは、モデルの属性を渡す必要があります。これを行うには、Model.toJSONを呼び出して、モデルの内部attributesハッシュのコピーを返すことをお勧めします。

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

テンプレートでは、プロパティ名でコンテキストにアクセスできます。

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

がそれを手に入れた:として

{{ user.address.street }} 

が解析されます。つまり、BackboneモデルではなくJSONをテンプレートに公開するという考え方です。 –

+3

@AkshayRawat、 'Model.toJSON'はちょっと面倒な名前です。返すものは実際のJSONではないので、通常のjavascriptオブジェクトです。実際のJSONが必要な場合は、 'JSON.stringify(model.toJSON())'を呼び出す必要がありますが、Handlebarsが必要とするのは通常のオブジェクトです。 – jevakallio

+0

'toJSON'という名前はバックボーンのフォールトではありません。名前は[' JSON.stringify'](https://developer.mozilla.org/en-US/docs/JSON#toJSON()_method)で指定されています。 –

6

実は私は、私はバックボーンモデルを処理するためのハンドルバーの変更を.toJSONとそれほど多くの場所を開発しましたしました:

https://gist.github.com/4710958

値がバックボーンのインスタンスである場合には、チェックします。 Modelであり、そうであれば.get()メソッドを呼び出します。

Backbone.Modelはグローバルに使用する必要があります。

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

これはHandleBars v1.3.0でも引き続き使用できますか?私はあなたのスニペットを私のapp.jsに入れましたが、何もしないようです。 – ddewaele

+0

申し訳ありませんが、私はハンドルバーをもう使用しないのでわかりません。コンソールにエラーが表示されますか?もしそうなら、我々はhttps://gist.github.com/amatiasq/4710958でそれについて話し続けることができます。 –

関連する問題