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()thisテンプレートundefined内にあり、ブール値のコンテキストでは false である{{#this}}ため、何もしません。undefined

このテンプレートを使用すると、これを明確に確認できます。

<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 に答える