Наследство джекилла
У меня есть следующий макет, с Jekyll 3.7.3;
declare A = apple
include file.html > declare A = orange
print A => orange
Я запутался в том, как сделал A=orange
Утечка в родительский макет, в документе Джекилла, говорит, что переменные оценивают через layout
в жидкой бирке. Относится ли это к include
также? Нет никакого смысла в том, где дочерний макет перезаписывает родительский макет, как говорится в разговоре на github и в этом разговоре.
Итак, мой вопрос: как работает наследование?
Из того, что я понимаю о наследовании, должен быть некоторый контроль над тем, как дочерняя переменная перезаписывает родительскую переменную. Из документа я считаю, что это через переменную layout
, Тогда это должно выглядеть так;
declare A = apple
include file.html > declare layout.A = orange
print A => apple
Другой случай есть;
объявить А = яблоко
include file.html > print A => apple
объявить A = оранжевый
печать A => оранжевый
Какой смысл иметь аргумент во включении, если ребенок include
наследует значение без явного указания.
также с переменными утечки в include
ребенок, будет означать ребенка include
больше не изолирован для целей особого случая, как здесь говорится
1 ответ
Включает и макеты не то же самое.
При создании сайта Jekyll делает много вещей в определенном порядке.
- Читайте данные страниц
- Сделать жидкость
- сделать необходимым
includes
- вычислять жидкие метки и фильтры
- сделать необходимым
- Рендеринг HTML в случае, если документ уценки
- Визуализация макета
Когда это делает жидкость:
=== page.html
include other.html
print a
assign: a = apple
print a
include other.html
=== end page.html
Становится кучей кода, который обрабатывается так:
=== page.html
====== other.html
print a ------> nil
assign: a = orange
print a ------> orange
====== end other.html
print a ------> orange
assign: a = apple
print a ------> apple
====== other.html
print a ------> apple
assign: a = orange
print a ------> orange
====== end other.html
=== end page.html
Жидкие теги выполняются в точности в том порядке, в котором они появляются в коде, а переменные (локальные переменные, назначенные в теле страницы, а не те, что указаны в начале, замораживаются и не могут быть изменены), являются глобальными и могут быть переопределены со страницы или любого дочернего элемента,
После этого он рендерит HTML при необходимости и "плюет" на страницу {{ content }}
в макете, который ничего не знает о локальных переменных страницы и может видеть только переменные страницы, определенные в начале.