如何在Jade模板之间传递变量

54

我正在使用一个模板作为基础,并希望它能意识到在使用它的页面中设置的一些变量...

文件: 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页面标题是"things"


这个限制真的很糟糕。那些变量需要放到扩展模板中。 - cc young
5个回答

117

我在这里找到了解决方案。

传递带有变量的块。

template.jade:

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

page.jade

extends template
block vars
  - var pageTitle = 'Home'

2
当您包含一个扩展布局的模板时,似乎无法正常工作。 - Ben Southall
刚刚发现这个。完美地解决了我的问题。而且解决方案非常简洁。谢谢! - Mathias

4
你可以使用块:
template.jade:
!!! 5
head
    block title
        title variables

page.jade:

extends template
block title
    title things

否则,您需要在脚本中定义变量(例如express)。 据我所知,变量只能通过包含来传递,而无法向上到布局(在您的情况下为template.jade)。

2
如何使用模板包含
// 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}

2

一个非常好的且备有注释的解决方案,可以添加类似于这样的标题:
"我的项目 - 页面".

或者只是这样:
"我的项目"

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

2

我曾认为块对我没用,因为我需要在多个地方使用变量。

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

块是一种很赞的东西


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接