我建议的一个选项是使用单独的布局。它利用了 Harp 已有的系统,并有助于维护“不同内容,不同文件”的概念。使用 Harp,您可以为_data.json或_harp.json文件中的任何给定页面指定显式布局。
来自http://harpjs.com/docs/development/layout
_layout 以外的布局可以在 _data.json 中指定。如果您需要更好地控制布局,或者如果您想将布局命名为 _layout 以外的名称,这将非常有用。
myapp.harp.io/
|- _layout.ejs
|- index.ejs
|- about.md
+- articles/
|- _data.json
|- _an-example-layout.ejs
|- _another-one.jade
|- article-one.md
+- article-two.md
在这里,可以通过在该文件夹的 _data.json 文件中指定布局来使 article-one.md 使用 _an-example-layout.ejs:
{
"article-one": {
"layout": "_an-example-layout",
"title": "Example Title"
},
"article-two": {
"layout": "_another-one",
"title": "Another Example Title"
}
}
现在,每篇文章都将使用指定的布局。
如果您想要做的只是一个微小的差异并且您不能证明拥有一个完全独立的模板是合理的,那么如果您使用 Harp 的partial()
函数而不是 Jade 的include
关键字,您也可以将数据传递给包含。然后处理不同变量值的逻辑将在一个head.jade
文件中。您的示例可能如下所示。
foo.jade:
doctype html
html
body
!= partial("./includes/head.jade", { page: bar })
h1 My Site
p Welcome to my super lame site.
include ./includes/foot.jade
head.jade现在应该可以访问page变量了。
第三个选项可以利用current
Harp 注入模板的对象。如果您正在访问//site.com/foo/bar
,current.source === "bar"
和current.path === ["foo", "bar"]
. 您可以使用此对象来动态设置类名等。您可以在此处阅读更多信息:http: //harpjs.com/docs/development/current