我尝试使用NodeJS和Backbone渲染Handlebars模板。
到目前为止,我在HTML文件中完成的工作非常有效:
app.MyView = Backbone.View.extend({
...
render: function() {
var template = Handlebars.compile( $("#my-template").html());
this.$el.html( template(this.model.toJSON()) );
return this;
}
...
});
在HTML中查看:
<script type="text/x-handlebars-template" id="my-template">
{{text}}
</script>
但是,如果我将此视图放在Handlebars模板中,它就不起作用,因为NodeJS Handlebars编译器正在解释{{text}}。
答案 0 :(得分:5)
尝试:
<script type="text/x-handlebars-template" id="my-template">
\{{text}}
</script>
答案 1 :(得分:0)
我已经使用名为“braces”的帮助程序修复了它:
...
exports.braces = function(obj1){
return '{{'+param+'}}';
}
...
使用:
<script type="text/x-handlebars-template" id="my-template">
{{{braces 'text'}}}
</script>
有没有办法在不使用助手的情况下这样做?
答案 2 :(得分:0)
您可以在app.js
中定义助手,例如
app.engine(
'.hbs',
hbs({
extname: '.hbs',
defaultLayout: 'base',
...
helpers: {
default: hbsHelper(), // this is the default helpers if you have like handlerbars-helpers
raw() { return 'your templates' }
}
})
);
您的情况是
raw() { return
'<script type="text/x-handlebars-template" id="my-template">
{{text}}
</script>' }
在代码中将`替换为`。
然后在前端文件(例如.hbs)中,仅包含{{{raw}}}
,就可以使用模板而无需渲染。这样一来,您就可以编写普通模板而无需进行任何其他修改,因为{{{raw}}}
只会将其呈现为html。