Наследство джекилла

У меня есть следующий макет, с 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 }} в макете, который ничего не знает о локальных переменных страницы и может видеть только переменные страницы, определенные в начале.

Другие вопросы по тегам