2012-09-28 9 views
51

Sto usando un modello come base, e voglio che sia a conoscenza di alcune variabili impostate nella pagina che lo utilizza ...come passare variabili tra i modelli di giada

File: template.jade

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

File: page.jade

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

voglio il page.jade compilato per avere un titolo "cose"

+0

questa limitazione fa davvero schifo. quelle variabili devono andare al modello esteso. –

risposta

111

trovo soluzione here

blocco passaggio con le variabili

template.jade:

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

page.jade

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

Soluzione semplice ed efficiente, grazie! – gustavohenke

+0

Sì, ha funzionato bene – Gepsens

+2

Questa dovrebbe essere una risposta accettata. – Travis

4

È possibile utilizzare i blocchi:

template.jade:

!!! 5 
head 
    block title 
     title variables 

page.jade:

extends template 
block title 
    title things 

Altrimenti è necessario definire le variabili nello script (ad esempio esprimere). Per quanto ne so, le variabili possono essere passate solo tramite include, ma non verso l'alto per il layout (template.jade nel tuo caso).

+5

che fa schifo Jade! – arkanciscan

1

Ho pensato che i blocchi non avrebbero funzionato per me perché avevo bisogno di usare la variabile in più punti.

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

scopre che può effettivamente specificare lo stesso blocco di due volte nel template padre e qualunque sia il template figlio passa ad esso viene duplicato.

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

Blocchi FTW

1

Una soluzione ottima e commentata per aggiungere titolo come questo:
"Il mio progetto - La pagina".

O semplicemente questo:
"Il mio progetto"

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

qualche pagina: page.jade

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

Come sull'utilizzo 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} 
Problemi correlati