Передача переменных через partial в Handlebars.js

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для передачи переменных в шаблоны Handlebars, вам потребуется хелпер Handlebars. Вот пример создания такого хелпера на JavaScript, который позволяет добавить дополнительную переменную в текущий контекст и использовать её в вашем шаблоне Handlebars:

JS
Скопировать код
Handlebars.registerHelper('includeWithVar', function(extraVar, options) {
  return options.fn(Object.assign({}, this, { extraVar }));
});

Чтобы передать переменную extraVar в подключаемую часть myPartial, выполните вызов хелпера:

handlebars
Скопировать код
{{#includeWithVar myVariable}}
  {{> myPartial}}
{{/includeWithVar}}

Теперь переменная myVariable доступна в шаблоне myPartial как {{extraVar}}.

Кинга Идем в IT: пошаговый план для смены профессии

Эффективное использование частей шаблона Handlebars

Применение шаблонов Handlebars удобно для создания модульного и легко переиспользуемого кода. Важно уметь передавать переменные между отдельными частями шаблона.

Использование именованных параметров для динамического содержимого

Когда требуется добавить динамику, вы можете использовать именованные параметры:

handlebars
Скопировать код
{{> myPartial headline="Срочные новости" }}

Такие переменные, как headline, можно использовать для условного отображения в myPartial:

handlebars
Скопировать код
<h1>{{#if headline}}{{headline}}{{else}}Заголовок по умолчанию{{/if}}</h1>

Объединение контекстов

Если требуется передать множество переменных, можно использовать метод объединения контекстов:

JS
Скопировать код
Handlebars.registerHelper('withContext', function(context, options) {
  return options.fn(Object.assign({}, this, context));
});

Создание дочернего контекста

Вы можете изолировать часть данных, чтобы предотвратить их смешивание с основным контекстом:

JS
Скопировать код
let context = {
  user: {
    name: 'Джейн Доу',
    titles: {
      main: 'Генеральный директор',
      secondary: 'Основатель'
    }
  }
};

Используйте часть данных в userPartial, не передавая всего объекта пользователя.

Динамические резолверы шаблонов

Используйте кустомные хелперы для динамического выбора шаблонов:

JS
Скопировать код
Handlebars.registerHelper('dynamicPartial', function(name, options) {
  let templateName = Handlebars.partials[`partial_${name}`];
  return new Handlebars.SafeString(templateName(options.hash));
});

Вызовите функцию с динамическим именем и аргументами:

handlebars
Скопировать код
{{#dynamicPartial "comments" user=userObject }}

Сложные сценарии и хелперы

Для реализации сложных сценариев могут быть полезны пользовательские хелперы, управляющие множеством переменных и конфигураций.

Визуализация

Представьте себе поезд(🚂), который перевозит почту(📧) из одного города в другой:

Markdown
Скопировать код
Город Handlebars (🏠): Это дом для шаблонов (📄), которые ожидают содержимого.
Город Данных (🏙️): Здесь переменные (📦) ожидают отправки.
handlebars
Скопировать код
{{> partialName }}

Это как отправка пустого вагона. Прикрепите к нему груз переменных и ощутите разницу!

handlebars
Скопировать код
{{> partialName variable=package }}
Markdown
Скопировать код
До: 🚂📄 -- Пустой поезд, пустые мечты
После: 🚂📦📄 -- Поезд с переменными, полный ожиданий.

Теперь проблема передачи данных решена.

Загрузка частей с помощью кастомного загрузчика

JS
Скопировать код
function loadPartial(name) {
  const template = Handlebars.templates[name];
  Handlebars.registerPartial(name, template);
}

Защита от утечек данных с помощью специального хелпера

JS
Скопировать код
Handlebars.registerHelper('safeString', function(text, options) {
  return new Handlebars.SafeString(text);
});

Таким образом, можно отрендерить неэкранированный HTML, однако следует помнить об возможности XSS-атак.

Контекстная обёртка для частей

handlebars
Скопировать код
{{> userPartial user=model.user }}

Теперь все переменные доступны через префикс user., что делает код более предсказуемым и понятным.

Полезные материалы

  1. Handlebars — официальная документация.
  2. Partials | Handlebars — руководство по использованию частей.
  3. Submitting HTML form using Jquery AJAX – Stack Overflow — дискуссия о обработке форм.
  4. Medium — статья о контексте и области видимости.
  5. A Beginner's Guide to Handlebars — SitePoint — как передавать переменные в частицы.
  6. Handlebars Tutorial – YouTube — видеоурок о продвинутых возможностях Handlebars.
  7. JSFiddle − О проекте — демонстрация кода с контекстуальными переменными в Handlebars.