我有这段代码:
if (this.template) {
var template = Handlebars.compile( $(this.template).html() );
$(this.el).html(template());
}
使用此模板:
<script id="tmpl-nav-account" type="text/x-handlebars-template">
{{#this}}
<div class="nav-account">
topbar
</div>
{{/this}}
但是,如果运行没有参数的'template()'函数,则没有输出。然而,如果我传递的内容如下:“template('ben')”,它会输出静态HTML。有人有任何想法吗?
template()是否总是要传递一些东西来渲染模板?
编辑:
如果我从模板中删除了{{#this}},那么它不使用任何参数......
答案 0 :(得分:1)
模板顶层的this
是您提供给编译模板函数的参数。所以,鉴于此:
var o = { ... };
var t = Handlebars.compile(some_template_text);
t(o);
this
将o
位于模板的顶层。因此,如果您说template()
,this
在模板中是undefined
,{{#this}}
将无法执行任何操作,因为undefined
在布尔上下文中为false。< / p>
如果您使用此模板,您可以清楚地看到这一点:
<script id="tmpl-nav-account" type="text/x-handlebars-template">
{{#this}}
<div class="nav-account">
{{this.where_is}}
</div>
{{/this}}
</script>
和这个JavaScript:
var t = Handlebars.compile($('#tmpl-nav-account').html());
console.log(t());
console.log(t({ where_is: 'pancakes house?' }));