10

Handlebars 条件でグローバル変数を使用する可能性はありますか? 多くのオブジェクトを一覧表示するアプリを作成しています。一覧表示する詳細をユーザーが制御できるようにしたいと考えています。たとえば、次のように人のリストに名のみを表示します。

<ul>
{{#each people}}
    <li>
        <p>{{firstName}}</p>
        {{#if displayLastnames}}
        <p>{{lastName}}</p>
        {{/if}}
    </li>
{{/each}}
</ul>

実際にデータを変更したくありません (たとえば、lastName 属性を削除して{{#if lastName}}.

4

2 に答える 2

17

「displayLastnames」という名前のグローバル ヘルパーを登録して、 if で使用することもできます。

  Handlebars.registerHelper('displayLastnames', function(block) {
    return displayLastnames; //just return global variable value
  });

サンプルのように使用してください:

  {{#if displayLastnames}}
    <p>{{lastName}}</p>
  {{/if}}
于 2013-02-12T12:02:29.493 に答える
11

Handlebars は変数を名前空間にするため、グローバル変数に直接アクセスすることはできません。おそらく最も簡単な方法は、独自のヘルパーを追加することです。次のような単純なものです。

Handlebars.registerHelper('if_displayLastnames', function(block) {
    if(displayLastnames)
        return block.fn(this);
    else
        return block.inverse(this);
});

そして、あなたのテンプレートで:

{{#if_displayLastnames}}
<p>{{lastName}}</p>
{{/if_displayLastnames}}

もちろん、「グローバル」変数を独自の名前空間に入れたいと思うでしょう。

デモ: http://jsfiddle.net/ambiguous/Y34b4/

于 2012-08-03T06:52:45.127 に答える