Как передать переменные между нефритовыми шаблонами

Я использую шаблон в качестве базы и хочу, чтобы он знал о некоторых переменных, установленных на странице, использующей его...

Файл: template.jade

vars = vars || {some:"variables"}
!!! 5
head
    title vars.some

Файл: page.jade

vars = {some:"things"} //- this does not get used from within template.jade
extends template

Я хочу, чтобы скомпилированный page.jade имел заголовок "вещи"

Ответ 1

Я нахожу решение здесь

передать блок с переменными

template.jade:

!!!
html
  block vars
  head
      title #{pageTitle} - default www title
  body

page.jade

extends template
block vars
  - var pageTitle = 'Home'

Ответ 2

Вы можете использовать блоки:

template.jade:

!!! 5
head
    block title
        title variables

page.jade:

extends template
block title
    title things

Иначе вы должны определить переменные в script (например, express). Насколько мне известно, переменные могут передаваться только через include, но не вверх по макету (template.jade в вашем случае).

Ответ 3

Я думал, что блоки не будут работать для меня, потому что мне нужно использовать переменную в нескольких местах.

// base.jade
pageTitleVar = "Parent Title"
!!!
title !{pageTitleVar}
h1 !{pageTitleVar}

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

// base.jade
pageTitleVar = "Parent Title"
!!!
title
  block pageTitleBlock
    !{pageTitleVar}
h1
  block pageTitleBlock
    !{pageTitleVar}

// child.jade
extends base
pageTitleVar = "Child Title"
block pageTitleBlock
   !{pageTitleVar}

Блоки FTW

Ответ 4

Отличное и прокомментированное решение, чтобы добавить название: "Мой проект - Страница" .

Или просто:
"Мой проект"

шаблон: template.jade

doctype 5
html(lang="en")
head
    //- setting the page title to be dynamic
    block vars
        - var defaultTitle = "My Project"
        - var pageTitle = pageTitle
    title #{defaultTitle}#{pageTitle}

какая-то страница: page.jade

extends base
//- custom page title
block append vars
    pageTitle = " - The Page"

Ответ 5

Как насчет использования ?

// vars.jade
- var name = "Chris"
#{ nick = "StackOverflow"  }


// page.jade
doctype html
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    h1= title
    include vars
    p Welcome to #{title} #{name} #{nick}