Skip to content
This repository was archived by the owner on Apr 21, 2023. It is now read-only.
tiger31 edited this page Aug 27, 2018 · 3 revisions

Linker

Linker используется для связи с инопланетным разумом элементов шаблонизатора Handlebars с JavaScript. После того, как Handlebars закончит свою работу, Linker начинает находить и сохранять помеченные блоки.

Handlebars helper

Для того, чтобы пометить блок, который должен быть слинкован после шаблонизации, следует использовать helper:

<script type="text/x-handlebars-template">
  <div class="content" {{{linker obj "content"}}}></div>
</script>

После линковки AjaxModule автоматически получит результаты и <div> будет доступен из внутренней переменной html

Helper принимает на вход два обязательных параметра и два необязательных. Все необязательные параметры должны передаваться с указанием имени. Например: r=true

Обязательные:

  • Экземпляр Linker'a, который будет отвечать за линковку.
  • Имя, под которым будет доступен элемент после линковки.

Необязательные

  • Параметр r, по умолчанию равен false. Если установлен в true, то поиск остальных блоков будет производиться в этом блоке. Используется, только если модуль является под-модулем. Иначе элемент останется неслинкованым

Пример (под-модуль)

<script type="text/x-handlebars-template">
  <div class="content" {{{linker obj "content" r=true}}}>
    <div {{{linker obj "images"}}}>
      <img {{{linker obj "image"}}}/>
      <img {{{linker obj "image"}}}/>
      <img {{{linker obj "image"}}}/>
    </div>
  </div>
</script>

После того, как шаблон будет построен Linker найдет все элементы и запишет в AjaxModule.html объект вида:

{
  content: ...
  images: ...
  image: [Array(3)]
}

При этом поиск images будет производиться в content, а всех image в images

Краткое описание полей и методов

Все описанные методы и переменные не предусмотрены для ручного использования

Далее, вершиной будем называть элемент с r=true

Каждый экземпляр Linker'а содержит несколько внутренних переменных:

  • links - Объект, содержащий набор ссылок для линковки
  • html_roots - Объект, с ключами, равными r_for для выходных вершин
  • link_roots - Объект, с ключами, равными name для выходных вершин
  • our_roots - Массив с выходными, еще не слинковаными вершинами
  • html - Объект с ключами, равными name уже слинкованых элементов

Использование в шаблонах для AjaxModule

Так как любой экземпляр AjaxModule по-умолчанию внутри себя имеет Linker, метод template_data() возвращает объект, который имеет "зарезервированное" поле _l, в котором и передается сам линкер. В связи с этим шаблон будет выглядеть подобным образом:

<script type="text/x-handlebars-template">
  <div class="content" {{{linker _l "content"}}}></div>
</script>