Express JS: тэг «каждый» на руле не отображает содержимое - PullRequest
0 голосов
/ 28 марта 2020

Я использую Express JS и пакет Handlebars, и на самом деле я сталкиваюсь с чем-то странным. Я не знаю, пропустил ли я что-то, надеюсь, но не могу понять, что не так в моем коде.

Я использую: https://github.com/ericf/express-handlebars

Я не могу заставить оператор {{#each}} работать в моем коде.

Вот что у меня есть:

views.ts

const Views = {
    config: {
        // views template configuration
        extname: '.hbs',
        helpers: {
            modulesList: () => {
                return appModules.modulesList();
            },
            foo: () => { return 'FOO!'; },
            bar: ['tic', 'tac', 'toe'],
            // bar: () => { return ['tic', 'tac', 'toe'] },
        }
    },
}

// Views is exported

app.ts

const exphbs  = require('express-handlebars');
const views = require('twiice/views.ts');

app.engine('.hbs', exphbs(views.config));
app.set('view engine', '.hbs');
app.set('views', './twiice/views');

home.hbs

<div class="col">
    {{#each bar}}
       <h6 class="text-light text-uppercase ls-1 mb-1">{{foo}}</h6>
    {{/each}}
    <h6 class="text-light text-uppercase ls-1 mb-1">Overview</h6>
    <h5 class="h3 text-white mb-0">Sales value</h5>
    <h6 class="text-light text-uppercase ls-1 mb-1">{{foo}}</h6>
</div>

На самом деле, foo отображается на последнем h6 в коде html, что означает, что помощник загружен.

Но оператор each ничего не отображает для bar.

После do c: https://handlebarsjs.com/guide/builtin-helpers.html

Я не вижу ничего плохого: /

Большое спасибо за вашу помощь, я все еще учусь! :)

Полный код здесь: https://github.com/Brawcks/twiice-ts/

1 Ответ

1 голос
/ 29 марта 2020

Вы неправильно используете помощника bar.

Помощники руля являются функциями. Если вы хотите использовать помощника в своем шаблоне, вы используете его в выражении Handlebars, например {{uppercase firstName}}. В этом выражении uppercase является идентификатором помощника, которого мы определили, а firstName является переменной в нашем объекте контекста данных, которая будет передана нашему uppercase помощнику.

Выражение {{#each bar}} сообщая рулям о вызове встроенного вспомогательного блока #each для переменной bar в объекте контекста данных.

Однако bar не существует в объекте контекста данных, поскольку bar это не часть наших данных, а другой помощник, которого мы определили. Итак, наша проблема: как мы вызываем двух помощников в одном и том же выражении Handlebars?

Handlebars имеет ответ на этот вопрос; это Подвыражения . Все, что для этого требуется, - это заключить внутреннее выражение (я) в скобки.

Это означает, что обновления вашего кода до {{#each (bar)}} будет достаточно, чтобы сообщить Handlebars, что bar является помощником, которого мы хотим вызвать и чье возвращаемое значение мы хотим передать #each.

Я создал скрипку для вашей справки.

...