HandlebarsJS不输出html模板,除非收到一个参数

时间:2012-12-07 11:56:38

标签: handlebars.js

我有这段代码:

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}},那么它不使用任何参数......

1 个答案:

答案 0 :(得分:1)

模板顶层的this是您提供给编译模板函数的参数。所以,鉴于此:

var o = { ... };
var t = Handlebars.compile(some_template_text);
t(o);

thiso位于模板的顶层。因此,如果您说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?' }));​

演示:http://jsfiddle.net/ambiguous/fS8c9/