2012-09-28 81 views
51

我使用的模板爲基礎,並希望它知道有些變量在頁面設置在使用它的...如何玉模板之間傳遞變量

文件:template.jade

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

文件:page.jade

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

我想編譯page.jade有一個標題爲 「東西」

+0

這個限制真的很糟糕。這些變量需要去擴展模板。吮玉的 –

回答

111

我找到的解決方案與變量here

通過塊

template.jade:

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

page.jade

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

簡單而高效的解決方案,謝謝! – gustavohenke

+0

是的,工作得很好 – Gepsens

+2

這應該是一個被接受的答案。 – Travis

4

你可以使用塊:

template.jade:

!!! 5 
head 
    block title 
     title variables 

page.jade:

extends template 
block title 
    title things 

否則你必須在腳本中定義的變量(例如表達)。 據我所知,變量只能通過includes來傳遞,但不能向上傳遞給佈局(在你的情況下是template.jade)。

+5

! – arkanciscan

1

我以爲塊不適合我,因爲我需要在多個地方使用變量。

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

原來你其實可以在父模板和任何子模板傳遞給它被重複兩次指定了相同的塊。

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

塊FTW

1

一個偉大的評論解決方案,添加這樣的標題:
「我的項目 - 頁」

或者只是這樣的:
「我的項目」

模板: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} 

一些頁面:page.jade

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

如何使用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}