Handler js custom helper for else if
Я начал использовать Handlebars.js. Кажется, что нет никаких построенных условных выражений, как если бы они были if.
Я хочу иметь что-то вроде этого
{{#if type.one }}
do something ... IF
{{else if type.two}}
do something ... ELSE IF
{{else}}
do something ... ELSE
{{/if}}
Но это не работает. Как я делаю ELSE IF с рулями? Является ли запись специального помощника единственным вариантом? Если да, пожалуйста, предоставьте несколько указателей, чтобы написать этого помощника.
Ответы
Ответ 1
Так как Handlebars 3.0 синтаксис, описанный OP, работает из коробки! См. https://github.com/wycats/handlebars.js/pull/892 для получения дополнительной информации.
Примечание:
Для Ember, начиная с версии 1.10 и выше, это тоже работает. Смотрите также:
http://emberjs.com/blog/2015/02/07/ember-1-10-0-released.html#toc_chained-else-blocks
Ответ 2
Вы не можете сделать это с помощью специального помощника, поскольку Handlebars if-ish helpers понимают только две части: часть "if" и "else". Вы можете вложить вещи, хотя:
{{#if type.one}}
do something ... IF
{{else}}
{{#if type.two}}
do something ... ELSE IF
{{else}}
{{#if type.three}}
...
{{else}}
...
{{/if}}
{{/if}}
{{/if}}
Такие вещи будут неприятными, поэтому вы, вероятно, не захотите этого делать. Лучший подход (как обычно, с Handlebars) заключается в том, чтобы подтолкнуть логику к вашему JavaScript, чтобы было не более одного из type.one
, type.two
, type.three
,...; то вы могли бы:
{{#if type.one}}
...
{{/if}}
{{#if type.two}}
...
{{/if}}
{{#if type.three}}
...
{{/if}}
Если у вас есть много вариантов для type
или если тела в вашем {{#if}}
сложны, вы можете переключиться на частичные. Вы должны добавить пользовательский помощник, чтобы построить частичное имя, основанное на переменной шаблона; что-то вроде этого:
Handlebars.registerHelper('show_type', function(type) {
var types = ['one', 'two', 'three'];
var partial;
for(var i = 0; i < types.length; ++i) {
if(!type[types[i]])
continue;
partial = '_partial_' + types[i];
break;
}
if(partial)
return Handlebars.partials[name](this);
else
return '';
});
а затем, считая, что ваши частичные файлы зарегистрированы и последовательно названы, вы можете сказать:
{{show_type type}}
Ответ 3
если вы используете ember как фреймворк,
{{#if isAtWork}}
Ship that code!
{{else if isReading}}
You can finish War and Peace eventually...
{{/if}}
ссылка: http://guides.emberjs.com/v1.12.0/templates/conditionals/
Ответ 4
Вы можете сделать это:
{{#if type.one}}
...
{{else}} {{#if type.two}}
...
{{else}} {{#if type.three}}
...
{{else}}
...
{{/if}}{{/if}}{{/if}}
Ответ 5
Если вам нужно поведение переключателя, вас может заинтересовать помощники Dan Harper, вы сможете сделать что-то вроде:
{{#is type 1}}
<p>Do something when 1.</p>
{{else}}{{#is type 2}}
<p>Do something when 2.</p>
{{else}}{{#is type 3}}
<p>Do something when 3.</p>
{{/is}}{{/is}}{{/is}}
Вот jsfiddle.
Ответ 6
Точный синтаксис, который написал OP, будет работать в Ember Canary сегодня с помощью
ember-htmlbars-inline-if-helper
флаг функции включен.