0

我有这个代码:

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}},那么它可以在没有参数的情况下工作......

4

1 回答 1

1

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

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

thiso位于模板的顶层。因此,如果您说template(),thisundefined模板内并且{{#this}}不会做任何事情,因为undefined在布尔上下文中是 false 。

如果您使用此模板,您可以清楚地看到这一点:

<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/

于 2012-12-07T17:16:35.057 回答