Есть ли троянский оператор в handlebars.js? - программирование

Есть ли троянский оператор в handlebars.js?

В Handlebars есть тройной оператор? Я не имею в виду if else; Я имею в виду a == true ? "a" : "b".

4b9b3361

Ответ 1

Вы можете создать своего помощника в handlbars, если хотите. Что-то вроде ternary(a==true, "a", "b"). Для получения дополнительной информации см. Документацию . Идея от m90 - это не идея рулей. Идея состоит в том, чтобы не иметь явного кода в ваших шаблонах, только вызовы помощников и объектов.

Ответ 2

Помощник if может использоваться как тройной оператор, передавая ему три аргумента.

В следующем примере кнопка имеет значение по умолчанию "Save Changes", но когда model.isSaving имеет значение true, значение временно изменяется на Saving....

<button>{{if model.isSaving "Saving..." "Save Changes"}}</button>

... альтернативно, используется в другом помощнике:

{{input type="submit" value=(if model.isSaving "Saving..." "Save Changes")}}

Ответ 3

У меня есть помощник для этого (обратите внимание, что другие помощники также могут использоваться внутри) https://gist.github.com/terion-name/d87ed8907f1bb2e25f32

// app/helpers/iftrue.js
import Ember from 'ember';

export function iftrue(params) {
  if (params[0]) {
    return params.length === 2 ? params[0] : params[1];
  }
  if (params.length === 2) {
    return params[1];
  } else if (params.length === 3) {
    return params[2];
  }
  return null;
}

export default Ember.Helper.helper(iftrue);

С двумя параметрами: если первый параметр будет равен true, он будет напечатан, в противном случае второй

{{iftrue project.price 'N/A'}} // $9.99
{{iftrue project.priceNotAvailable 'N/A'}} // N/A

С тремя параметрами: если первый параметр будет равен true, будет напечатан второй, в противном случае третий

// If deadline is set formatted date will be printed, otherwise 'N/A'
{{iftrue project.deadline (moment-format project.deadline 'DD.MM.YYYY') 'N/A'}} 

Ответ 4

Этот нижеприведенный код может использоваться для тернарного или любого выражения eval.

Предупреждение: используйте этот код в сценарии, где eval можно безопасно использовать.

{{#if (myfunc "(a[0] + 1) % 2 === 0" arg1)}}

{{/if}}

{{#if (myfunc "(a[0] + a[1]) % 2 === 0" arg1 arg2)}}

{{/if}}

вспомогательная функция руля

myfunc: (exp, ...a) => {
    return eval(exp);
  }