2012-09-28 29 views
51

estoy usando una plantilla como base, y quiero que sea consciente de algunas variables establecidas en la página que se está utilizando ...cómo pasar variables entre las plantillas de jade

del archivo: template.jade

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

del archivo: page.jade

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

quiero que el page.jade compilado para tener un título "cosas"

+0

esta limitación realmente es una mierda. esas variables necesitan ir a la plantilla extendida. –

Respuesta

111

puedo encontrar solución here

bloque pase con variables

template.jade:

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

page.jade

extends template 
block vars 
    - var pageTitle = 'Home' 
+2

Solución simple y eficiente, ¡gracias! – gustavohenke

+0

Sí funcionaba bien – Gepsens

+2

Esto debería ser una respuesta aceptada. – Travis

4

Puede utilizar bloques:

template.jade:

!!! 5 
head 
    block title 
     title variables 

page.jade:

extends template 
block title 
    title things 

más tiene que definir las variables en el script (por ejemplo, expresar). Hasta donde yo sé, las variables solo se pueden pasar a través de includes, pero no hacia arriba en el diseño (template.jade en su caso).

+5

que apesta a Jade! – arkanciscan

1

Pensé que los bloques no funcionarían para mí porque tenía que usar la variable en varios lugares.

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

Resulta que en realidad se puede especificar el mismo bloque dos veces en la plantilla padre y cualquiera que sea la plantilla hija pasa a ella se duplica.

// 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} 

Bloques FTW

1

Una solución genial y comentado para añadir título como este:
"Mi proyecto - La Página".

O simplemente esto:
"Mi Proyecto"

plantilla: 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} 

alguna página: page.jade

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

Cómo sobre el uso template includes?

// 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} 
Cuestiones relacionadas