以下のようなテンプレートをテンプレート化しようとしています:
{{{
{
"name" : "{{name}}",
"description" : "{{description}}"
}
}}}
{{{debug this}}}
<h1>{{name}}</h1>
トリプルブラケットを残したいが、渡されたJSONでダブルブラケットを置き換える場合シナリオのタイプ?
区切り記号は、erbスタイルのタグなど、トリプルヒゲと競合しないものに切り替えることができます。
{{=<% %>=}}
{{{
{
"name": "<% name %>",
"description": "<% description %>"
}
}}}
{{{debug this}}}
<%={{ }}=%>
これは、テンプレート全体で何度でも実行できます。衝突する何かに遭遇したときはいつでも、新しい区切り文字のセットを選択してください:)
この質問 で説明されているように、ハンドルバーは区切り文字の変更をサポートしていません。しかし、あなたはcanこのようなバックスラッシュで二重括弧をエスケープすることができます:
HTML:
... \{{ myHandlbarsVar }} ...
テンプレートをコンパイルする前にMustache.tags = ["[[", "]]"];
を割り当てることもできます。
http://jsfiddle.net/fhwe4o8k/1/
例えば.
$(function () {
Mustache.tags = ["[[", "]]"];
var template = $('#test').html();
Mustache.parse(template);
var rendered = Mustache.render(template, {test: "Chris"});
$('#content-placeholder').html(rendered);
});
別のオプションは、中括弧を出力するためのヘルパーを作成することです。
Handlebars.registerHelper('curly', function(object, open) {
return open ? '{' : '}';
});
そして、次のようにテンプレートで使用します:
<script id="template" type="text/x-handlebars-template">
{{curly true}}{{name}}{{curly}}
</script>
次に出力します:
{Stack Over Flow Rocks}
ちょっと違うアプローチが欲しかった。私は他のいくつかの方法を試しましたが、ここで私が気に入らなかったことがいくつかあります:
{{obj.property}}
他の何かを括弧で囲むことは悪い考えです。主に、非標準のangular構成を認識していないサードパーティのコンポーネントを使用し始めるとすぐに、これらのサードパーティのコンポーネントのバインディングは機能しなくなります。AngularJSチームは複数のバインディング表記を許可するルートに行きたいようです、 この問題 をチェックしてくださいいいえ、私の答え:NodeJSとExpressを使用している場合は、次のことを行う必要があります。
バインディングを置換{{}}
angularのようなもので{[{}]}
(または完全にユニークなもの)
今、あなたのルートでコールバックをrenderメソッドに追加します:
app.get('/', function(req, res){
res.render('home', {
title: 'Awesome Website',
description: 'Uber Awesome Website'
}, function(err, html){
var htmlWithReplacedLeftBracket = html.replace(/{\[{/g, '{{');
var finalHtml = htmlWithReplacedLeftBracket.replace(/}\]}/g, '}}');
res.send(finalHtml);
});
});
これにより、MustacheをAngularJSと一緒に使用できるようになります。改善できる方法の1つは、そのメソッドを別のモジュールに抽出して、すべてのルートで再利用することです。