2014-12-16 3 views
25

Глядя на это руководство Using Blaze, кажется, что Blaze поддерживает {{#if}} и {{else}}, но я не видел примеров инструкции if-else. Поддерживается ли это в Blaze? Или мне нужно сделать дополнительный блок if внутри блока else, который может стать уродливым.Meteor + Blaze - Если еще заявление

Я пробовал {{else if}}, но это позволило сделать ошибку.

{{#if en}}{{text.en}}{{else if tc}}{{text.tc}}{{/if}} 

ответ

50

Spacebars использует ту же самую структуру, как управление потоком handlebars так что ответ такой же, как this one. В вашем случае:

{{#if en}} 
    {{text.en}} 
{{else}} 
    {{#if tc}} 
    {{text.tc}} 
    {{/if}} 
{{/if}} 

примечание стороны - одна из хороших вещей о jade является то, что он поддерживает else if.


Иногда лучшая альтернатива, чтобы переместить логику в качестве помощника, как это:

Template.myTemplate.helpers({ 
    textValue: function() { 
    if (this.en) { 
     return this.text.tc; 
    } else if (this.tc) { 
     return this.text.tc; 
    } 
    } 
}); 
<template name="myTemplate"> 
    <p>{{textValue}}</p> 
</template> 
+0

Спасибо за ваш ответ. Но что, если у меня есть много сообщений 'else if'? Делать это таким образом будет уродливо. Нет альтернатив? – dayuloli

+0

Используя только шаблоны, альтернативы нет. Я бы рекомендовал добавить вспомогательный шаблон для возврата нужного вам значения. –

+0

Я не знаю, как это сделать в данный момент. Я прочитаю об этом. Спасибо за ваш ответ и разъяснение! Я потратил все свои голоса на сегодня. Будет +1 завтра! – dayuloli

4

Вслед за отличным ответом @David Уэлдон, это также стоит отметить, что вы можете передать параметры к вашим вспомогательным функциям JavaScript из вашего шаблона Blaze.

Так, например, ниже код выборочно предоставляет опции для списка выбора, вызвав метод помощника с линией isSelected region customerCompany:

{{#if isSelected region customerCompany}} 
     <option value={{region._id}} selected>{{region.name}}</option> 
    {{else}} 
     <option value={{region._id}}>{{region.name}}</option> 
    {{/if}} 

, а затем в файле JS:

isSelected: function (region, customer) { 

    return customer.salesRegionId === region._id; 
}, 

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

1

Текущая версия Blaze поддерживает else if - см. Ниже примерный формат и ссылку на разрешение проблемы github.

{{#if isUserProfile}} 
    <h3>User Profile</h3> 
{{else if isLawyerProfile}} 
    <h3>Lawyer Profile</h3> 
{{else}} 
    <h3>Test</h3> 
{{/if}} 

Ссылка Ссылка: GitHub Else If Issue Resoltion

Смежные вопросы