web-dev-qa-db-fra.com

comment passer des variables entre des modèles de jade

J'utilise un modèle comme base et je veux qu'il soit au courant de certaines variables définies dans la page qui l'utilise ...

Fichier: template.jade

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

Fichier: page.jade

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

Je veux que le fichier compilé page.jade ait un titre "choses"

54
Billy Moon

Je trouve la solution ici

passer un bloc avec des variables

template.jade:

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

page.jade

extends template
block vars
  - var pageTitle = 'Home'
116

Vous pouvez utiliser des blocs:

template.jade:

!!! 5
head
    block title
        title variables

page.jade:

extends template
block title
    title things

Sinon, vous devez définir les variables dans votre script (par exemple express). Pour autant que je sache, les variables ne peuvent être transmises que via les inclusions, mais pas vers le haut à la mise en page (template.jade dans votre cas).

4
roka

Que diriez-vous d'utiliser le modèle comprend ?

// 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}
2
Chris Jeong

Une excellente solution et commentée pour ajouter un titre comme celui-ci:
"Mon projet - La page".

Ou juste ceci:
"Mon projet"

modèle: 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}

une page: page.jade

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

Je pensais que les blocs ne fonctionneraient pas pour moi car j'avais besoin d'utiliser la variable à plusieurs endroits.

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

Il s'avère que vous pouvez réellement spécifier deux fois le même bloc dans le modèle parent et tout ce que le modèle enfant lui transmet est dupliqué.

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

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

Blocs FTW

2
Jesse Hattabaugh