Mustacheはロジックがないので、 Handlebars 。
あなたの親切に優しい選択肢は、ヘルパーを宣言し、それを使ってレンダリングするテンプレートを選択することです。それはちょっと複雑になりますが、あなたが変更できないものなら、Mustacheから切り替えるのを避けることができます:
var base_template = '{{#events}}' +
'{{{event_renderer}}}' +
'{{/events}}';
var message_template = '<div>message: {{title}}</div>';
var image_template = '<div>image: {{title}}</div>';
var data = {
events: [ {title: 'hello', type: 'message'}, {title: 'world', type: 'image'} ],
event_renderer: function() {
return Mustache.render('{{> ' + this.type + '}}', this, {message: message_template, image: image_template});
}
}
Mustache.render(base_template, data);
The trick here is that you create a base template that will be the iterator, and pass in event_renderer
as a helper. That helper will in turn call Mustache.render again, using partials to render each type of event you can have (that's the {{> partial}} notation).
この唯一の醜い部分は、この event_renderer
メンバーをJSONデータに追加する必要があることですが、それ以外はすべてうまくいくはずです(ハンドルバーではヘルパーとして宣言でき、あなたのデータとマージする)。