-
Notifications
You must be signed in to change notification settings - Fork 0
Linker
Linker используется для связи с инопланетным разумом элементов шаблонизатора Handlebars с JavaScript. После того, как Handlebars закончит свою работу, Linker начинает находить и сохранять помеченные блоки.
Для того, чтобы пометить блок, который должен быть слинкован после шаблонизации, следует использовать 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 по-умолчанию внутри себя имеет Linker, метод template_data() возвращает объект, который имеет "зарезервированное" поле _l, в котором и передается сам линкер. В связи с этим шаблон будет выглядеть подобным образом:
<script type="text/x-handlebars-template">
<div class="content" {{{linker _l "content"}}}></div>
</script>