В Handlebars есть тройной оператор? Я не имею в виду if else
; Я имею в виду a == true ? "a" : "b"
.
Есть ли троянский оператор в handlebars.js?
Ответ 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);
}