3

我正在尝试使用 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}}。

4

3 回答 3

5

尝试:

<script type="text/x-handlebars-template" id="my-template">
   \{{text}}
</script>
于 2013-10-15T17:06:36.763 回答
0

我已经通过使用一个名为“大括号”的助手来修复它:

...
exports.braces = function(obj1){
   return '{{'+param+'}}';
}
...

并使用:

<script type="text/x-handlebars-template" id="my-template">
   {{{braces 'text'}}}
</script>

有没有办法在不使用助手的情况下做到这一点?

于 2013-10-15T16:58:35.213 回答
0

app.js您可以在like中定义助手

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)中,只需 include {{{raw}}},您就可以在不渲染的情况下使用模板。这样您就可以编写普通模板而无需进行任何其他修改,因为{{{raw}}}只会将其呈现为 html。

于 2018-11-26T14:34:22.607 回答