再帰が必要な 1 つのオブジェクトを次に示します。
物体
var obj = [
{
obj: true,
key: 'a',
value: [
{
obj: false,
key: 'a',
value: 1
},
{
obj: false,
key: 'b',
value: 2
},
{
obj: true,
key: 'c',
value: [
{
obj: false,
key: 'a',
value: 3
}
]
}
]
},
{
obj: false,
key: 'b',
value: 4
}
];
テンプレート (recursion.html)。
<!-- root -->
<ul>
{{#value}}
<li>
<!-- object -->
{{#obj}}
<span><b>{{key}}</b></span>
{{>object}}
{{/obj}}
<!-- value -->
{{^obj}}
<span><b>{{key}}</b> <span>{{value}}</span></span>
{{/obj}}
</li>
{{/value}}
</ul>
渡す最初のオブジェクトはルートでありkey
、value
. value
にプロパティobj
が設定されている場合、true
それはオブジェクトであり、そのキーを出力し、その値に対してテンプレートを再帰的に呼び出します。オブジェクトでない場合、再帰は必要ありません。単純に出力してください。
クライアント側をレンダリングします。
// html is recursion.html contents
var template = Hogan.compile(html),
content = template.render({value: obj}, {object: html});
// show the rendered template
$('body').empty().append(content);
Express.js でサーバー側をレンダリングする
res.render('recursion', {
value: obj,
partials: {
object: 'recursion'
}
});
この例の出力
ところで、テンプレートのレンダリングに Hogan.js を使用しています。Mustache.js render が再帰をサポートしているかどうかはわかりません。