小胡子条件和循环

以下是资源:

JSON

{ "badges":{ "unlocked": [ {"name": "Win 1"}, {"name": "Win 2"}, {"name": "Win 3"} ], "locked":[ {"name": "Lose 1"}, {"name": "Lose 2"}, {"name": "Lose 3"} ] } } 

算法

 {{ if_has_badges }} 

Badges

{{ if_has_badges_unlocked }}

Unlocked!

{{ loop_badges_unlocked }} {{ name }} {{ end_loop_badges_unlocked }}
{{ end_if_has_badges_unlocked }} {{ if_has_badges_locked }}

Locked!

{{ loop_badges_locked }} {{ name }} {{ end_loop_badges_locked }}
{{ end_if_has_badges_locked }}
{{ end_if_has_badges }}

我如何编写这个算法来使用Mustache编译器?

我需要这样做才能与双方合作,首先是RubyOnRails应用程序,第二个是客户端(JavaScript)。

您的问题有两种解决方案。

使用选择和反转选择

以下是胡子文档中的示例:

 { "repos": [] } 

模板:

 {{#repos}}{{name}}{{/repos}} {{^repos}}No repos :({{/repos}} 

输出:

 No repos :( 

当你看到倒置选择让我做条件逻辑。 在你的情况下,它看起来像:

JSON:

 var viewModel = { badges:[]//badges here } viewModel.anyBadges = badges.length >0; 

胡子:

  
{{#anyBadges}}

Unlocked!

{{/anyBadges}} {{#badges_unlocked}} {{ name }} {{/badges_unlocked}}

不要在无逻辑模板中做逻辑

这就是我要做的。 如果你的Mustache模板中有条件逻辑,我认为你做错了。 你可以使用Handlebars而不是在这方面更先进,或者将你的逻辑移到其他地方(到你的javascript)。

请参阅Mustache自述文件

最好的答案(对于Ruby和JavaScript)是将您的逻辑( if_has_badges类型问题)封装到View类中。

实际上,您可以使用数组length属性伪装它,以获得Ruby和JavaScript中所需的一些逻辑:

 {{# badges.length }} 

Badges

{{# badges.unlocked.length }}

Unlocked!

{{# badges.unlocked }} {{ name }} {{/ badges.unlocked }}
{{/ badges.unlocked.length }} {{# badges.locked.length }}

Locked!

{{# badges.locked }} {{ name }} {{/ badges.locked }}
{{# badges.locked.length }}
{{/ badges.length }}

但这样做有点肮脏……