Подтвердить что ты не робот

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 с рулями? Является ли запись специального помощника единственным вариантом? Если да, пожалуйста, предоставьте несколько указателей, чтобы написать этого помощника.

4b9b3361

Ответ 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}}

Ответ 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 флаг функции включен.