2013-02-23 16 views
8

Sto usando Jade (senza Express, solo per il template HTML statico) - che ho capito come in grado di creare partial, il che significa che lo scope non è un problema, ma questo non sembra essere il caso e non riesco a trovare alcun riferimento a questo caso d'uso.Jade templating, ambito variabile incluso

master.jade

!!! 5 
html 
    block vars 
    - var slug= 'home' 
    head 
    block pagetitle 
     title Static HTML 
    link(rel='stylesheet', href='css/styles.css') 
    body(class= slug) 
    .wrapper 
     include includes/header 

include/header.jade

.header 
    ul 
    li(class= slug) 
sintassi

Ho provato varianti tra cui #{slug} e sempre ottenere l'errore "slug non è definito" all'interno del includes/header.jade file - è possibile farlo?

EDIT: Quindi la risposta come indicato da Dave Weldon nei commenti qui sotto è che la variabile è disponibile quando incluso nel master.jade ma il mio comando build compilata tutti file di giada tra cui la include in proprio, a quale punto la variabile non è chiaramente definita.

risposta

15

Si potrebbe ottenere questo risultato con un mixin in questo modo:

master.jade

include includes/header 

!!! 
html 
    block vars 
    - var slug= 'home' 
    head 
    block pagetitle 
     title Static HTML 
    link(rel='stylesheet', href='css/styles.css') 
    body(class= slug) 
    .wrapper 
     mixin header(slug) 

include/header.jade

mixin header(klass) 
    .header 
    ul 
     li(class= klass) 

Quando compilato:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Static HTML</title> 
    <link rel="stylesheet" href="css/styles.css"> 
    </head> 
    <body class="home"> 
    <div class="wrapper"> 
     <div class="header"> 
     <ul> 
      <li class="home"></li> 
     </ul> 
     </div> 
    </div> 
    </body> 
</html> 
+0

così stai dicendo l'inclusione non avrà spazio su quella variabile? Vorrei evitare un mixin dato il contenuto del mio file include include/header.jade - il mio esempio è stato abbastanza semplificato! Ma se stai dicendo che non posso ereditare la variabile come questa suppongo di non avere scelta –

+0

in realtà funziona bene :) grazie - sicuramente usando mixin di più - non così male come pensavo - grazie ancora –

+0

Sì, mi sono reso conto che non l'ho fatto in realtà rispondi alla tua domanda Quindi il tuo codice originale funziona bene se hai appena eseguito 'jade master.jade' - riceverai un errore se compili' includes/header.jade'. Personalmente sono un grande fan dei mix e li uso il più possibile. Penso che sia la soluzione migliore anche in questo caso, dal momento che è possibile specificare quali argomenti il ​​mixin può assumere, e jade non si lamenterà se chiedete di compilare l'inclusione. –