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

Метеор + Блейз - если другое выражение

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

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

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

Ответ 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 при использовании шаблонов.