2013-02-23 14 views
8

Używam Jade (bez wyraźnej, tylko dla statycznego HTML szablonów) - co zrozumiałem, jak w stanie stworzyć partials, czyli zakres nie jest problemem, ale to nie wydaje się być i nie znajduję odniesienia do tego przypadku użycia.Jade szablonów, zmienna w zakres obejmuje

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 

includes/header.jade

.header 
    ul 
    li(class= slug) 

Próbowałem składnia warianty tym #{slug} i zawsze błąd "ślimak nie jest zdefiniowana" w includes/header.jade plik - czy to możliwe?

EDIT: Więc odpowiedź podana przez Dave Weldon w komentarzach poniżej jest to, że zmienna jest dostępna, gdy włączone master.jade ale moje polecenie build skompilowany wszystkie plików jade tym includes na własną rękę, co w którym punkcie ta zmienna nie jest oczywiście zdefiniowana.

Odpowiedz

15

Można by to osiągnąć z mixin tak:

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) 

includes/header.jade

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

Kiedy skompilowany:

<!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

tak mówisz o tym nie będzie mieć zasięgu na tę zmienną? Chciałbym uniknąć mixin ze względu na zawartość mojego pliku zawiera/header.jade - mój przykład był dość uproszczony! Ale jeśli mówisz, że nie mogę odziedziczyć zmiennej takiej jak ta, to chyba nie mam wyboru –

+0

faktycznie działa dobrze: dziękuję - zdecydowanie za pomocą miksów więcej - nie tak źle, jak myślałem - jeszcze raz dziękuję –

+0

Tak, zdałem sobie sprawę, że zrobiłem faktycznie odpowiedzieć na twoje pytanie. Więc twój oryginalny kod działa dobrze, jeśli uruchomisz 'jade master.jade' - dostaniesz błąd, jeśli skompilujesz' includes/header.jade'. Osobiście jestem wielkim fanem mixin i używam ich tak często, jak tylko mogę. Myślę, że jest to najlepsze rozwiązanie nawet w tym przypadku, ponieważ możesz określić, jakie argumenty może zająć mixin, a jaderzy nie będą narzekać, jeśli poprosisz go o skompilowanie tego pliku. –