Как выполнить if/else в файле mustache.js?
Кажется довольно странным, что я не могу понять, как это сделать в усах. Поддерживается ли это?
Это моя грустная попытка попробовать:
{{#author}}
{{#avatar}}
<img src="{{avatar}}"/>
{{/avatar}}
{{#!avatar}}
<img src="/images/default_avatar.png" height="75" width="75" />
{{/avatar}}
{{/author}}
Это, очевидно, неправильно, но в документации не упоминается ничего подобного. Слово "else" даже не упоминается: (
Кроме того, почему усы разработаны таким образом? Это что-то считается плохой? Он пытается заставить меня установить значение по умолчанию в самой модели? Как насчет случаев, когда это невозможно?
Ответы
Ответ 1
Так вы делаете if/else в Mustache (отлично поддерживается):
{{#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
Ответ 2
Это то, что вы решаете в "контроллере", который является точкой без логического шаблона.
// 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 или один объект настроек DEFAULTS?;)
Другой вариант - сделать следующее:
// augment view
view.hasAvatar = !!view.avatar;
view.noAvatar = !view.avatar;
И в шаблоне:
{{#hasAvatar}}
SHOW AVATAR
{{/hasAvatar}}
{{#noAvatar}}
SHOW DEFAULT
{{/noAvatar}}
Но это противоречит всему смыслу логического шаблона. Если это то, что вы хотите сделать, вам нужны логические шаблоны, и вы не должны использовать Усы, хотя сами даете ему возможность получить эту концепцию;)
Ответ 3
Ваше другое выражение должно выглядеть так (обратите внимание на ^
):
{{^avatar}}
...
{{/avatar}}
В усах это называется "Перевернутые разделы".