Метеор + Блейз - если другое выражение
Глядя на это Используя Blaze, кажется, что Blaze поддерживает инструкции {{#if}}
и {{else}}
, но я не видел примеров инструкции if-else, Поддерживается ли это в Blaze? Или мне нужно сделать дополнительный блок if внутри блока else, который может стать уродливым.
Я пробовал {{else if}}
, но это дало ошибку.
{{#if en}}{{text.en}}{{else if tc}}{{text.tc}}{{/if}}
Ответы
Ответ 1
Spacebars использует ту же структуру потока управления, что и handlebars, поэтому ответ такой же, как этот. В вашем случае:
{{#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>
Ответ 2
Следуя замечательному ответу @David Wheldon, также стоит отметить, что вы можете передавать параметры своим вспомогательным функциям 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
при использовании шаблонов.