16

在 Express 的第 3 版中,删除了一些功能:

the concept of a "layout" (template engine specific now)
partial() (template engine specific)

更新日志:https ://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x

partial()可以为 EJS 自己的功能更改,include但布局的替代方法是什么?

4

3 回答 3

17

我也为此苦苦挣扎。所以我建立了一个 github 项目,其中包含 ejs 和dustjs 的示例。

https://github.com/chovy/express-template-demo

我不确定部分和包含之间的区别,您不需要显式将数据传递给包含。不知道为什么你会想要一个部分。

但是对于布局,您只需指定一个这样的块:

//layout.ejs
<html>
<%- body %>
</html>

//page1.ejs
<% layout('layout') -%>
This is loaded from page 1 and overrides <%- body %> in the layout.ejs.

如果有人想添加更多示例,只需提交拉取请求。

于 2012-09-27T08:20:49.983 回答
15

似乎从 Express 3 开始,布局功能被委托给模板引擎负责。您可以使用 ejs-locals ( https://github.com/RandomEtc/ejs-locals ) 进行布局。

安装 ejs-locals

npm install ejs-locals --save

在 app.js 中使用 ejs-locals 作为你的应用引擎

var express = require('express');
var engine = require('ejs-locals');
...

app.engine('ejs', engine);
app.set('view engine', 'ejs');

现在您可以使用布局

layout.ejs
<body>
  <%- body %>
</body>

index.ejs
<% layout('layout') -%>

<div class="container">
<div class="jumbotron">
...

另一种选择是使用 express-partials ( https://github.com/publicclass/express-partials )。两者做同样的事情,所以这只是你的选择。

于 2013-12-07T20:22:13.840 回答
0

您可以使用“包含”选项来模仿 Express 2.x 中的 EJS 布局。在这里查看我的答案:

https://stackoverflow.com/a/12477536/446681

于 2012-09-27T11:43:37.170 回答