Loading...
TeodorDimitrov89 avatar TeodorDimitrov89 264 Точки

[JS Web] Handlebars

Здравейте,

Имам проблем с handlebars темплейта, а той е следния:

Опитвам се да направя много проста if-проверка от сорта ако а === b, но hanldebars-a не го поддържа.

Инсталирах си допълнителен модул handlebars-helpers, но не успях да я регистрирам и да я използвам.

Молбата ми е, ако някой знае как се прави да ми помогне.

Благодаря

0
Module: JS Web 08/06/2017 22:20:32
RoYaL avatar RoYaL Trainer 6849 Точки

Здравей,

Това, което се опитваш да направиш е строго против философията на подобни template engine-и. Преосмисли дали не можеш тази логика да я изнесеш във викащата шаблона функция.

Ако все пак много ти се налага, можеш да си регистрираш простичък собствен помощник чрез функцията registerHelper().

Handlebars.registerHelper('if', function(a, b, options) {
    if(a === b) {
        return options.fn(this);
    }
    return options.inverse(this);
});

Разбира се, подобна помощна функция ще работи само за твоя случай с проверка за равенство.

{{#if a b}}
    <h1> Good! A is equal to B </h1>
{{/if}}

Ако искаш да правиш проверки с функции (equals, etc...) или други оператори, ще трябва да подаваш параметъра за оператор или функция като низ или нещо, което може да се вика (callable).

Handlebars.registerHelper('if', function(a, op, b, options) {
    if (op == '==' && a == b) return options.fn(this);
    if (op == '===' && a === b) return options.fn(this);    
    if (op == '>' && a > b) return options.fn(this);
    if (op == '<' && a < b) return options.fn(this);
    // etc..
    if (typeof op == 'function' && op(a, b) || op.apply(a, b)) return options.fn(this);

    return options.inverse(this);
});

И някакво подобно използване

{{#if a '>' b}}
    <h1> Good! A is greater than B </h1>
{{/if}}

Но наистина помисли дали не може тази логика да се измести там, където й е мястото :)

Успех!

2
03/06/2017 16:13:12
kayleig avatar kayleig -2 Точки

When I believed in forever, and everything would stay the same
Now my heart feel like December when somebody say your name.
 surviv io

-2
advydv avatar advydv 0 Точки

I also faced the same problem thank you for answering.  i want to wish happy Holi in advance 

0
TeodorDimitrov89 avatar TeodorDimitrov89 264 Точки

Здравей,

Благодаря за отговора, аз успях да си направя проста функция, но проблема е, че не разбирам защо не ми приема променлите, които подавам:

 <select name='category'>
    {{#each category}}
      {{#customif expected=category._id val=recipe.category}}
        <option value="{{this._id}}">sadas</option>
        {{!--<option value="Pesho">dsadsa</option>--}}
      {{/customif}}
    {{/each}}
  </select>

Моята функция:

customif: (options) => {
    if (options.hash.expected === options.hash.val) {
      return options.fn(this)
    }
  }

Реално влиза в тоя if, но не разпознава къдравите скоби от handlebars.

Исках да направя нещо подобно като това

select.input-field(name='category')
    each category in categories
        if (category._id.equals(product.category))
            option(value=`${category._id}` selected)=category.name
        else
            option(value=`${category._id}`)=category.name
0
03/06/2017 17:27:36
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.