关于javascript:如何在mustache.js中完成if / else?

How do I accomplish an if/else in mustache.js?

我不知道如何在胡须中做到这一点似乎很奇怪。 支持吗?

这是我尝试的尝试:

1
2
3
4
5
6
7
8
    {{#author}}
      {{#avatar}}
        <img src="{{avatar}}"/>
      {{/avatar}}
      {{#!avatar}}
        <img src="/images/default_avatar.png" height="75" width="75" />
      {{/avatar}}
    {{/author}}

这显然是不对的,但是文档中没有提到这样的内容。 甚至没有提到"其他"这个词:(

另外,为什么胡须是这样设计的? 这种事情被认为是不好的吗? 是否要强迫我在模型本身中设置默认值? 在不可能的情况下呢?


这是在Mustache中的if / else方法(完全支持):

1
2
3
4
5
6
{{#repo}}
  {{name}}
{{/repo}}
{{^repo}}
  No repos :(
{{/repo}}

或您的情况:

1
2
3
4
5
6
7
8
{{#author}}
  {{#avatar}}
    <img src="{{avatar}}"/>
  {{/avatar}}
  {{^avatar}}
    <img src="/images/default_avatar.png" height="75" width="75" />
  {{/avatar}}
{{/author}}

在文档中查找反向部分:https://github.com/janl/mustache.js


这是您在"控制器"中解决的问题,这是无逻辑模板的关键。

1
2
3
4
5
6
7
8
9
10
11
12
13
// some function that retreived data through ajax
function( view ){

   if ( !view.avatar ) {
      // DEFAULTS can be a global settings object you define elsewhere
      // so that you don't have to maintain these values all over the place
      // in your code.
      view.avatar = DEFAULTS.AVATAR;
   }

   // do template stuff here

}

实际上,这比维护可能会在模板中更改的图像网址或其他媒体要好得多,但是需要一些时间来适应。关键是要取消学习模板隧道视觉,将头像img url绑定在其他模板中使用,您是否要在X模板或单个DEFAULTS设置对象上维护该url? ;)

另一种选择是执行以下操作:

1
2
3
// augment view
view.hasAvatar = !!view.avatar;
view.noAvatar = !view.avatar;

并在模板中:

1
2
3
4
5
6
{{#hasAvatar}}
    SHOW AVATAR
{{/hasAvatar}}
{{#noAvatar}}
    SHOW DEFAULT
{{/noAvatar}}

但这违背了无逻辑模板的全部含义。如果那是您想要做的,那么您就需要逻辑模板,并且不应该使用Mustache,尽管您可以自己给它学习这个概念的机会;)


您的else语句应如下所示(请注意^):

1
2
3
{{^avatar}}
 ...
{{/avatar}}

在胡须中,这称为"倒置部分"。