在小胡子模板中转义双括号{{…}}。 (在NodeJS中模板模板)

我正在尝试模板模板,如下所示:

{{{ { "name" : "{{name}}", "description" : "{{description}}" } }}} {{{debug this}}} 

 <h1>{{name}}</h1> 

在那里,我想要三个括号留下来,但双括号将被传入的JSON取代。任何人都知道最好的方式做到这一点,而不编写后处理的JS代码,如果没有,是否有一个很好的nodeJS模板引擎types的场景?

您可以将分隔符切换到不会与三重胡须(如erb样式标签)冲突的项目:

 {{=<% %>=}} {{{ { "name": "<% name %>", "description": "<% description %>" } }}} {{{debug this}}} <%={{ }}=%> 

请注意,您可以在整个模板中尽可能多地执行此操作。 任何时候遇到有冲突的地方,挑选一组新的分隔符:)

正如在这个问题中所描述的,handlebars不支持改变分隔符。 但是你可以用这样的反斜杠避免双斜杠:

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); }); 

另一个select是创build一个帮助器输出大括号。

 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} 

我只是想稍微不同的方法。 我已经尝试了其他几种方法,这里有一些我不喜欢的东西:

  1. 将Angular默认的{{obj.property}}括号{{obj.property}}别的东西是一个坏主意。 主要是因为一旦你开始使用不知道你非标准angular度configuration的第三方组件,这些第三部分组件中的绑定将停止工作。 另外值得一提的是,AngularJS团队似乎并不想要允许多个绑定符号的路线,请检查这个问题
  2. 我很喜欢小胡子模板,并不想因为这个小问题而把整个项目切换到别的东西上。
  3. 不less人build议不要混合客户端和服务器端渲染。 我不完全同意,我相信如果你正在build立一个多页面的网页,其中有几个页面是有angular度的,还有一些是静态的(比如关于我们或者条款和条件页面),使用服务器端模板使保持这些页面更容易。 但是,这就是说,对于Angular的部分,你不应该混合服务器端渲染。

好吧,没有我的答案:如果您使用NodeJS和Express,你应该到以下几点:

{[{}]} (或者完全唯一的东西)replace您的angular色部分中的绑定{{}}

现在在你的路线中添加一个callback给你渲染方法:

 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); }); }); 

这应该可以让你和AngularJS一起使用胡子。 您可以做的一项改进是将该方法提取到单独的模块中,以便在所有路线中重复使用。

对于这种types的问题,这是一个很好的解决scheme,您可以在运行时轻松地在模板设置中切换分隔符:

http://olado.github.com/doT/

您可以像这样执行RegEx设置:

 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 };