1

クライアント側のmustache.jsテンプレートエンジンで次のプレゼンテーションを実現する最も簡単な方法は何ですか?

var view = {
  search_term: 'something',
  number_of_hits: 3,
  hits: [...]
};

== 0の場合number_of_hits、画面に印刷します:「結果が見つかりません」

== 1の場合number_of_hits、画面に印刷します:「1つの結果が見つかりました」

> 1の場合number_of_hits、画面に印刷します:「N個の結果が見つかりました」

口ひげがロジックレスのテンプレートエンジンであることを知っているので、既存の口ひげタグでそれを行うことは可能ですか、それともJSON応答を変更する必要がありますか?

4

1 に答える 1

1

Mustache では、 タグとタグを使用して値0と非値を区別できます。0{{#section}}{{^inverted}}

<!-- If number_of_hits is not 0, show hits -->
{{#number_of_hits}}
 {{number_of_hits}} hits
{{/number_of_hits}}

<!-- If number of hits is 0 (or any other falsy value) -->
{{^number_of_hits}}
  No hits
{{/number_of_hits}}

私の知る限り、たとえば、Mustache は 1 と 2 の違いを検出できません。そのためにはview、テンプレートに渡すオブジェクトを変更する必要があります。おそらく次のようなものです:

var hits = 3;
var view = {
  search_term: 'something',
  number_of_hits: hits,
  hitkind: { 
    none: hits === 0,
    one:  hits === 1,
    many: hits > 1
  }
};

そしてテンプレに

{{#hitkind.none}} No hits {{/hitkind.none}}
{{#hitkind.one }} One hit {{/hitkind.one}}
{{#hitkind.many}} {{number_of_hits}} hits {{/hitkind.many}}

または、テンプレート エンジンをHandlebars.jsに変更することを検討してください。Handlebars は Mustache のスーパーセットです。つまり、すべての Mustache テンプレートが使用できます。ハンドルバー テンプレートは、Mustache のテンプレートと同様にロジックがないため、ロジックをテンプレートに直接書き込むことはできません。Helpers代わりに、テンプレートから呼び出し可能な 、または関数の概念を提供します。

Handlebars を使用すると、次のようなヘルパーを定義できます。

Handlebars.registerHelper('hitCount', function(count) {
  if(count === 0) return "No hits";
  if(count === 1) return "One hit";
  return count + " hits".
});

テンプレートから呼び出します。

{{hitCount number_of_hits}}
于 2013-01-05T10:00:58.397 に答える