Ember HTMLBars встроенные комбинированные условия

При попытке иметь простое условное присвоение класса стилей в HTMLBars с Ember 1.13, следующий код делает большую работу:

{{#each items as |item|}}
  <li class="tag {{if item.selected 'active' 'inactive'}}">{{item.key}}</li>
{{/each}}

Тем не менее, есть ли способ объединить условия в верхнем регистре, например, проверить другое условие? Что-то вроде следующего кода...

{{#each items as |item|}}
  <li class="tag {{if (item.selected or noneSelected) 'active' 'inactive'}}">{{item.key}}</li>
{{/each}}

... или это единственный способ выполнить проверку нескольких условий с помощью помощника Ember?

Спасибо за вашу поддержку!

1 ответ

Решение

Вы хотите сделать свой собственный помощник, давайте назовем это conditional-or:

import Ember from 'ember';

const { Helper: { helper } } = Ember;

export function conditionalOr(conditions, {valid, invalid}) {
  invalid = invalid || '';
  return conditions.some(elem => elem) ? valid : invalid;
}

export default helper(conditionalOr);

Функция some() выполняет итерацию по элементам массива и возвращает значение true, если выполняется один из критериев.

И вы сможете использовать его в своем шаблоне так:

<li class="tag {{conditional-or item.selected noneSelected valid='active' invalid='inactive'}}">{{item.key}}</li>
Другие вопросы по тегам