Понимание вспомогательных функций руля: options.fn () - PullRequest
0 голосов
/ 21 февраля 2020

Здравствуйте, я работаю через ' Веб-разработка с Node и Express' Этана Брауна. В книге, которая работает с шаблонами Handlebars, я нашел следующий код:

app.engine('handlebars', expressHandlebars({
    defaultLayout: 'main',
    helpers: {
        section: function(name, options) {
            if(!this._sections) this._sections = {}
            this._sections[name] = options.fn(this)
        },
    }
}));

main.handlebars:

<!doctype html>
<html>
    <head>
        {{{_sections.title}}}
        <link rel="stylesheet" href="css/main.css">
    </head>
    <body>
        <header>
            <img id= "header-logo" src="/img/logo.jpg">
        </header>

        {{{body}}}
    </body>
</html>

view.handlebars:

{{#section 'title'}}
    <title>Lore Ipsmum</title>
{{/section}}

<h1>Lore Ipsum</h1>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor</p>

У меня есть два вопроса по этому поводу:

  1. Насколько я понимаю, вспомогательная функция вызывается с this как контекст встраивания и, следовательно, используется для использовать содержимое {{#section 'title'}} -Block в view.handlebars для контекста, в котором отображается макет main.handlebars . Я до сих пор не до конца понимаю, почему options.fn(this) возвращает литералы в {{#section 'title'}} в виде строки.
  2. Это, очевидно, своего рода хакерское решение; принимая во внимание, насколько полезно и удобно иметь возможность объявлять несколько вещей в одном представлении, которые не обязательно должны отображаться согласованно на результирующей визуализированной странице, я предполагаю, что есть веская причина, почему нет более простого способа сделать это / почему это не функция по умолчанию?
...