Как я могу проверить несколько условий в шаблоне Handlebars?

У меня есть страница 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"                          
    }                                                       
  ]             

Возможный дубликат Рули: инструкция IF с несколькими условиями?

StudioTime 10.07.2018 18:26
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
1
2 489
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

(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 не является функцией

Beep 11.07.2018 10:57

Странно, а Gulp как-то меняет это предложение? Вы используете конкретную версию Handlebars? Моя такая: Handlebars v4.0.11handlebars.min.js. Я не использую Gulp.

gene b. 11.07.2018 17:57

хороший момент, плохо проверяю и принимаю ответ, если это такая проблема, спасибо

Beep 11.07.2018 18:18

Еще одна вещь, проверьте, как вы вызываете {{#if}..., проверьте все круглые скобки. Обратите внимание на порядок и то, как различные пункты сгруппированы выше.

gene b. 11.07.2018 18:42

Другие вопросы по теме