2012-10-10 89 views
0

我一直在跨越多個不同的框架使用部分應用程序跨越我的應用程序一段時間;我對Jade的實現感到困惑,或者我的錯誤用法,並希望得到其他利用者的經驗和對我的理解的任何更正。Jade部分繼承塊/擴展實現

文件夾結構:

$ cd <app_root>/views 
$ ls 
    myHoverToolTip.jade 
    layout.jade 

來電:

httpJadeViewerRsp = (req, res) -> res.render('myHoverToolTip.jade', { variable: 'here' }) 

myHoverToolTip.jade

extends layout 

block myHoverToolTip 
    .some-div 
    h1 Awesome-O Rocks 

layout.jade

<...bunch of jade markup...> 
.div 
    block myHoverToolTip 
    h5 Content to remove 

這適用於少量的用例,您只需提供一個頁面並正在尋找提供佈局的標準方式。然而,偏離這一點,並以更模塊化的方式使用partials來幹什麼,你會發現這個extends/block的實現讓我撓頭。我希望將我的工具提示分解爲一個部分,以便在數據網格中重用(當然,將部分變量傳遞給部分,因此不要包含這些變量),但此實現禁止我擁有此功能。任何人都可以提供進一步的見解,糾正我的用法,或指引我使用更好的NodeJs-ready模板庫,它們將與Express 3配合使用

回答

0

截至2012年8月和Express 3,「partials」支持被刪除,但功能仍然可以通過表達式「include [yourtemplatename]」而不用引號或括號。

Jade的替代方案我也發現有用的是EJS模板,它更像ASP.NET/JSTL。

編輯:在這兩種情況下,可以通過includes訪問父上下文和變量。

+0

不知道您是否閱讀我的文章......我遵循使用模板引擎的繼承進行部分實現的Express 3指令。 Jade是我所知道的唯一一個JS模板引擎,它具有指定的任何繼承。我相信這在EJS中不被支持,我錯了嗎?還要注意發送變量到partial的要求,如果我誤解了「include」是如何呈現的(靜態地),那麼「include」不支持這個要求,那麼請糾正我。 –

+1

假設基於其他語言的經驗,但是在這種情況下,「包含」在這些系統中不需要採取額外的步驟就可以繼承父上下文,這並不是錯的。我最近看到很多關於partials和vs的疑惑,因爲Express和相關模板系統最近發生了變化。 – Joshua

1

聽起來像mixins可能會幫助你。

+0

當然,不知道我是如何錯過的!然而,在嘗試「包括」出於絕望之後,看看究竟是什麼結果,我發現它確實將變量帶入包含中。我顯然跳過了文檔的另一部分。 –