繁体   English   中英

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

[英]Presentation logic inside mustache.js template engine

使用客户端mustache.js模板引擎实现以下演示的最简单方法是什么?

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

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

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

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

知道胡须是无逻辑的模板引擎,是否可以使用现有的胡须标签完全做到这一点,否则我将不得不更改JSON响应?

使用Mustache,可以使用{{#section}}{{^inverted}}标签区分0和非0值:

<!-- 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 车把是Mustache的超集,这意味着您的所有Mustache模板都可以使用。 就像Moustache的那样,车把模板是无逻辑的,因此它不能使您直接将逻辑写入模板。 相反,它提供了Helpers的概念,或可从模板调用的函数。

使用把手,您可以定义一个助手,例如:

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

并从模板调用它:

{{hitCount number_of_hits}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM