J'essaie de planifier un modèle, comme ci-dessous:
{{{ { "name" : "{{name}}", "description" : "{{description}}" } }}} {{{debug this}}}
<h1>{{name}}</h1>
Où je souhaite tripler les parenthèses pour rester, mais les deux crochets à remplacer par le JSON passés. Quelqu'un connait la meilleure façon de le faire sans écrire le code JS post-process, et sinon, y a-t-il un bon moteur modèle nodeJS pour cela? Type de scénario?
Vous pouvez changer les délimiteurs à quelque chose qui ne sera pas en conflit avec les trois moustaches, comme les étiquettes erb-style:
{{=<% %>=}} {{{ { "name": "<% name %>", "description": "<% description %>" } }}} {{{debug this}}} <%={{ }}=%>
Notez que vous pouvez le faire autant de fois que vous le souhaitez dans votre modèle. Chaque fois que vous rencontrez des conflits, choisissez un nouveau jeu de délimiteurs 🙂
Comme décrit dans cette Question, le guidon ne prend pas en charge la modification des délimiteurs. Mais vous pouvez échapper aux doubles accolades avec une barre oblique comme ceci:
HTML:
... \{{ myHandlbarsVar }} ...
Vous pouvez également attribuer Mustache.tags = ["[[", "]]"];
Avant votre compilation de modèle.
http://jsfiddle.net/fhwe4o8k/1/
par exemple
$(function () { Mustache.tags = ["[[", "]]"]; var template = $('#test').html(); Mustache.parse(template); var rendered = Mustache.render(template, {test: "Chris"}); $('#content-placeholder').html(rendered); });
Une autre option est de créer une aide pour la sortie des crochets frontaux.
Handlebars.registerHelper('curly', function(object, open) { return open ? '{' : '}'; });
Et utilisez-le dans le modèle comme ceci:
<script id="template" type="text/x-handlebars-template"> {{curly true}}{{name}}{{curly}} </script>
Qui produit ensuite:
{Stack Over Flow Rocks}
Je voulais juste une approche légèrement différente. J'ai essayé quelques autres façons et voici quelques choses dont je n'ai pas aimé:
{{obj.property}}
à autre chose est une mauvaise idée. Principalement parce que dès que vous commencez à utiliser des composants tiers qui ne connaissent pas votre configuration angulaire non standard, les liaisons dans ces composants de la troisième partie cesseront de fonctionner. Il convient également de mentionner que l'équipe AngularJS ne semble pas vouloir aller sur la voie de l'autorisation de plusieurs attestations, vérifier ce problème Ok, pas ma réponse: si vous utilisez NodeJS et Express, vous devriez être le suivant:
Remplacez les liaisons {{}}
dans votre partie angulaire avec quelque chose comme {[{}]}
(ou quelque chose d'complètement unique)
Maintenant, dans votre itinéraire, ajoutez une méthode de rappel à vous:
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); }); });
Cela devrait vous permettre d'utiliser Moustache avec AngularJS. Une amélioration que vous pourriez faire est d'extraire cette méthode dans un module distinct pour réutiliser toutes les routes.
C'est une bonne solution que j'ai trouvé pour ce type de problème où vous pouvez facilement modifier les délimiteurs dans les paramètres du modèle en exécution:
Vous pouvez effectuer les réglages RegEx comme ceci:
doT.templateSettings = { evaluate: /\{\{([\s\S]+?)\}\}/g, interpolate: /\{\{=([\s\S]+?)\}\}/g, encode: /\{\{!([\s\S]+?)\}\}/g, use: /\{\{#([\s\S]+?)\}\}/g, define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g, varname: 'it', strip: true, append: true, selfcontained: false };