Как мне выполнить if / else в усах.Джей?


Это кажется довольно странным, что я не могу понять как это сделать в усы. Это поддерживается?

Это моя печальная попытка попробовать:

    {{#author}}
      {{#avatar}}
        <img src="{{avatar}}"/>
      {{/avatar}}
      {{#!avatar}}
        <img src="/images/default_avatar.png" height="75" width="75" />
      {{/avatar}}
    {{/author}}

это, очевидно, не так, но в документации ничего подобного не упоминается. Слово "еще" даже не упоминается :(

кроме того, почему усы разработаны таким образом? Это считается плохим? Он пытается заставить меня установить значение по умолчанию в самой модели? А как насчет случаев, когда это невозможно?

3 229

3 ответа:

вот как вы делаете, если / else в усах (отлично поддерживается):

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
{{^repo}}
  No repos :(
{{/repo}}

или в вашем случае:

{{#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

Это то, что вы решаете в "контроллере", который является точкой логического шаблона.

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

}

это на самом деле намного лучше, чем поддерживать url-адрес изображения или другие носители, которые могут или не могут измениться в ваших шаблонах, но требуется некоторое привыкание. Дело в том, чтобы отучиться от шаблона туннельного видения, url-адрес Аватара img обязательно будет использоваться в других шаблонах, вы собираетесь поддерживать этот url-адрес в шаблонах X или в одном объекте настроек по умолчанию? ;)

другой вариант-сделать следующее:

// augment view
view.hasAvatar = !!view.avatar;
view.noAvatar = !view.avatar;

и в шаблоне:

{{#hasAvatar}}
    SHOW AVATAR
{{/hasAvatar}}
{{#noAvatar}}
    SHOW DEFAULT
{{/noAvatar}}

но это идет вразрез со всем смыслом логических шаблонов. Если это то, что вы хотите сделать, вы хотите логические шаблоны, и вы не должны использовать усы, хотя дать ему себя справедливый шанс изучить эту концепцию ;)

код другое заявление должно выглядеть так (Обратите внимание на ^):

{{^avatar}}
 ...
{{/avatar}}

в усах это называется "перевернутые секции".