mustache.js模板引擎中的表示逻辑

时间:2013-01-05 09:39:38

标签: javascript mustache

使用客户端mustache.js template engine实现以下演示文稿的最简单方法是什么?

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

如果number_of_hits == 0,则在屏幕上打印:“未找到结果”

如果number_of_hits == 1,则在屏幕上打印:“找到一个结果”

如果number_of_hits> 1然后在屏幕上打印:“ N 结果找到”

知道小胡子是无逻辑模板引擎,是否可以使用现有的小胡子标签来完成它,或者我将不得不更改JSON响应?

1 个答案:

答案 0 :(得分:1)

使用Mustache,可以使用00标记区分值{{#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模板都可以使用它。 Handlebars模板与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}}