如何在mustache.js中完成if/else?

ege*_*ari 247 javascript templates mustache

似乎很奇怪,我无法想象如何在胡子中做到这一点.是否支持?

这是我尝试的悲伤尝试:

    {{#author}}
      {{#avatar}}
        <img src="{{avatar}}"/>
      {{/avatar}}
      {{#!avatar}}
        <img src="/images/default_avatar.png" height="75" width="75" />
      {{/avatar}}
    {{/author}}
Run Code Online (Sandbox Code Playgroud)

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

另外,为什么胡子是这样设计的?这种事情被认为是坏事吗?它是否试图强迫我在模型中设置默认值?那些不可能的情况怎么样?

Ene*_*nso 478

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

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
{{^repo}}
  No repos :(
{{/repo}}
Run Code Online (Sandbox Code Playgroud)

或者在你的情况下:

{{#author}}
  {{#avatar}}
    <img src="{{avatar}}"/>
  {{/avatar}}
  {{^avatar}}
    <img src="/images/default_avatar.png" height="75" width="75" />
  {{/avatar}}
{{/author}}
Run Code Online (Sandbox Code Playgroud)

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

  • 胡子文档很搞笑."我们称之为"无逻辑",因为没有if语句,else子句或for循环." Yeeeeaaaaaa .... (79认同)
  • @MandM是啊...所以它有逻辑,但它无法做任何有用的事情:P (18认同)
  • @boxed,从技术上讲你是对的,倒置部分是一个逻辑语句,因为它检查标签值.但是,我认为这里的细微差别在于必须明确评估两个语句,而不是单个if/else.基本上,小胡子强制结构`if(condition){//做某事}`后跟`if(!condition){//做其他事情}`.此外,与基于逻辑的语言相比,可以在逻辑中执行的逻辑量极大地减少.存在或不存在是唯一的检查,即您无法检查标记的值是否等于5然后落入该标记的代码中. (6认同)

BGe*_*sen 53

这是你在"控制器"中解决的问题,这是无逻辑模板的要点.

// 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

}
Run Code Online (Sandbox Code Playgroud)

这实际上比维护图像网址或其他可能或可能不会在模板中更改的媒体更好,但需要一些时间来适应.关键是要忘记模板隧道视觉,必须在其他模板中使用头像img url,你要在X模板或单个DEFAULTS设置对象上维护该URL吗?;)

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

// augment view
view.hasAvatar = !!view.avatar;
view.noAvatar = !view.avatar;
Run Code Online (Sandbox Code Playgroud)

在模板中:

{{#hasAvatar}}
    SHOW AVATAR
{{/hasAvatar}}
{{#noAvatar}}
    SHOW DEFAULT
{{/noAvatar}}
Run Code Online (Sandbox Code Playgroud)

但这违背了无逻辑模板的全部含义.如果这就是你想要做的,你想要逻辑模板,你不应该使用Mustache,尽管给自己一个公平的机会学习这个概念;)


小智 14

你的其他陈述应该是这样的(注意^):

{{^avatar}}
 ...
{{/avatar}}
Run Code Online (Sandbox Code Playgroud)

在小胡子中,这被称为"倒置部分".

  • 请注意,您不需要#和^,它只是^''''的情况 (7认同)

Haf*_*hor 7

请注意,您可以使用{{.}}来呈现当前上下文项。

{{#avatar}}{{.}}{{/avatar}}

{{^avatar}}missing{{/avatar}}
Run Code Online (Sandbox Code Playgroud)