14

我在节点应用程序中使用把手,我遇到了麻烦。

这是模板index.html

{{CONTENT}}

这是代码

var fs = require("fs");
var handlebars = require("handlebars");

var data = {
    CONTENT: "<b>Hello world!</b>"
};

var templateFile = fs.readFileSync('./index.html', 'utf8');
var template = handlebars.compile( templateFile );
var html = template(data);

问题是标签<B>被转义到&lt;B&gt;

我怎样才能避免这种情况?

4

2 回答 2

38

来自handlebarsjs.com

Handlebars HTML 转义 {{expression}} 返回的值。如果您不希望 Handlebars 转义值,请使用“triple-stash”。

<div class="entry">
  <h1>{{title}}</h1>
  <div class="body">
    {{{body}}}
  </div>
</div>

在这种情况下:

{
  title: "All about <p> Tags",
  body: "<p>This is a post about &lt;p&gt; tags</p>"
}

结果是:

<div class="entry">
  <h1>All About &lt;p&gt; Tags</h1>
  <div class="body">
    <p>This is a post about &lt;p&gt; tags</p>
  </div>
</div>

但是,从我的角度来看,它可能会破坏将模板分开而不是 js 文件的目的。

如果您使用预编译,则使用 noEscape 选项:

handlebars.precompile(content, {noEscape: true})
于 2013-04-04T09:50:31.643 回答
26

您想在模板中使用“三重存储”:

{{{CONTENT}}}
于 2013-04-04T09:50:17.173 回答