2

これはJSON配列です:

{
"profile": [
    {
        "ID": 343,
        "gender": "female",
        "from": "Olivia"
    },
    {
        "ID": 4543,
        "gender": "female",
        "from": "Meagen"
    },
    {
        "ID": 787,
        "gender": "male",
        "from": "Aaron"
    }
]
}

これは機能し、配列内のすべてのオブジェクトを出力します...

{{#profile}}

{{from}} {{gender}}

{{/profile}}

出力は次のようになります...

Olivia female
Meagen female
Aaron male

しかし、私の目標は、女性と同じ性別を持つ人だけをループさせることです。何かのようなもの...

{{#profile gender="female"}}

{{from}} {{gender}}

{{/profile}}

...そして出力を次のように表示します...

Olivia female
Meagen female

私は数日間、答えを見つけるのに苦労してきました。私は何かが足りないのですか、それとも軌道から外れていますか?

4

1 に答える 1

6

2つのオプションがあります。

  1. ハンドルバーを渡す前にデータをフィルタリングします。
  2. カスタムヘルパーを使用して、テンプレート内のロジックを処理します。

最初のものはかなり簡単です。

2つ目は、どのように実行するかによって異なります。「等しい場合」のヘルパーを追加できます。

Handlebars.registerHelper('if_eq', function(a, b, block) {
    return a == b
         ? block(this)
         : block.inverse(this);
});

テンプレートでこれを行います。

{{#profile}}
    {{#if_eq gender "female"}}
        {{from}} {{gender}}
    {{/if_eq}}
{{/profile}}

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

または、さまざまな方法で独自のイテレータを作成できます。

Handlebars.registerHelper('each_female', function(list, opts) {
    var i, result = '';
    for(i = 0; i < list.length; ++i)
        if(list[i].gender == 'female')
            result = result + opts.fn(list[i]);
    return result;
});

{{#each_female profile}}
    {{from}} {{gender}}
{{/each_female}}

またはもう少し一般的:

Handlebars.registerHelper('each_when', function(list, k, v, opts) {
    console.log(arguments);
    var i, result = '';
    for(i = 0; i < list.length; ++i)
        if(list[i][k] == v)
            result = result + opts.fn(list[i]);
    return result;
});

{{#each_when profile "gender" "female"}}
    {{from}} {{gender}}
{{/each_when}}

デモ: http: //jsfiddle.net/ambiguous/E4jTs/、http//jsfiddle.net/ambiguous/AkZxN/

提案された構文に近いものが必要な場合は、ハッシュ引数に関する詳細なマニュアルを参照してください。

于 2012-10-18T17:20:12.137 に答える