У меня есть страница handelbars, где в зависимости от элемента заголовка в json будет отображаться разное содержимое.
пока это построено с использованием помощник if_wq
например если title = test это работает
Я хотел бы расширить эту функциональность, чтобы показать если title = test и colors.href = / test
поэтому условие действительно только в том случае, если оба условия верны.
пример моего кода
{{#if_eq title 'test'}}
True
{{/if_eq}}
Пример моей вспомогательной задачи
handlebars.Handlebars.registerHelper('if_eq', function(a, b, opts) {
if (a === b) {
return opts.fn(this);
} else {
return opts.inverse(this);
}
});
пример моего json
"range-list-page": {
"ranges": [
{
"title": "test",
"colors": [
{
"color": "#fff",
"label": "White",
"bordered": true,
"href" : "/test"
},
{
"color": "#F3DCAE",
"label": "Cream",
"href" : "http://google.com"
},
{
"color": "#C5B7B0",
"label": "Cashmere",
"href" : "http://google.com"
},
{
"color": "#D0B193",
"label": "Larch",
"href" : "http://google.com"
}
]






У меня есть следующие вспомогательные методы, которые я определяю:
(1) eq - он у вас уже есть,
Handlebars.registerHelper('eq', function(a, b) {
if (a == b) // Or === depending on your needs
return true;
else
return false;
});
(2) and - см. Важное примечание ниже.
Handlebars.registerHelper('and', function () {
// Get function args and remove last one (meta object); every(Boolean) checks AND
return Array.prototype.slice.call(arguments, 0, arguments.length - 1).every(Boolean);
});
ПРИМЕЧАНИЕ. Как видите, я должен удалить последний аргумент из arguments перед выполнением Array.prototype.slice.call, потому что последний возвращенный здесь аргумент является метаобъектом. Если не обрезать последний результат аргументов, every(Boolean) выдаст неверные результаты. В остальном это просто every(Boolean).
(3) Теперь, предполагая, что у нас есть эти 2 помощника, следующий пример работает для проверки AND / EQ:
{{#if (and (eq var1 'STRING1') (eq var2 'STRING2') ) }}
...
{{/if}}
хмм, похоже, появляется ошибка TypeError в плагине 'gulp-compile-handlebars' Сообщение: ((helpers.title || (depth0 && depth0.title)) || alias2) .call не является функцией
Странно, а Gulp как-то меняет это предложение? Вы используете конкретную версию Handlebars? Моя такая: Handlebars v4.0.11handlebars.min.js. Я не использую Gulp.
хороший момент, плохо проверяю и принимаю ответ, если это такая проблема, спасибо
Еще одна вещь, проверьте, как вы вызываете {{#if}..., проверьте все круглые скобки. Обратите внимание на порядок и то, как различные пункты сгруппированы выше.
Возможный дубликат Рули: инструкция IF с несколькими условиями?