TL;DR
次のハンドルバー テンプレートでは...
<div class="field field-label">
<label>{{label}}</label><input type="text" value="{{{{attribute}}}}">
</div>
{{attribute}} を評価する必要がありvalue="{{
ますが、属性の値を出力}}"
する必要があります。
バックグラウンド
テンプレートの興味深い使い方があります。私のアプリケーションには数十のフォーム (そして増え続けています!) があり、それらを表示するいくつかの方法があります。明らかに、それらはブラウザー、モバイル デバイス、または PDF などで表示できます。私がやりたいのは、これらのフォームを JSON で定義して、MongoDB のような場所に置くことです。そうすれば、HTML ビュー、モバイル アプリ、PDF レンダリング機能をすべて更新することなく、簡単に変更できます。
{
title: 'Name of this Form',
version: 2,
sections: [
{
title: 'Section Title',
fields: [
{
label: 'Person',
name: 'firstname',
attribute: 'FIRST',
type: 'text'
}, {
label: 'Birthday',
name: 'dob',
attribute: 'birthday',
type: 'select',
options: [
{ label: 'August' },
{ label: 'September' },
{ label: 'October' }
]
},
...
...
それは味です。そのtype: 'text'
結果<input type="text">
、name
は入力の名前、attribute
はモデルからの属性、yada yada になります。ネストされたオプションのフォームではかなり複雑になりますが、要点はわかります。
問題は、今では2 つのコンテキストがあることです。1 つ目はフォーム データを含む JSON で、2 つ目はモデルからの JSON です。うまくいくと思う2つのオプションがあります。
解決策 1
ヘルパーとして登録されたモデル コンテキストを含む簡単なクロージャー。
var fn = (function(model) {
return function(attr) {
return model[attr]
}
})(model);
Handlebars.registerHelper('model', fn)
...そのように使用するには...
<input type="text" name="{{name}}" value="{{model attribute}}">
解決策 2
2 つのパス。テンプレートにテンプレートを出力させ、それをコンパイルしてモデルで実行できるようにします。大きな利点の 1 つは、フォームをプリコンパイルできることです。私はこのアプローチを好むでしょう。これが私の質問です。テンプレートから {{attribute}} を出力するにはどうすればよいですか?
たとえば、私のテキストテンプレートでは...
<div class="field field-label">
<label>{{label}}</label><input type="text" value="{{{{attribute}}}}">
</div>
私は{{attribute}}
評価され、{{属性の値}}が出力される必要があります。