Макеты в Express 3 и EJS
В версии 3 Express некоторые функции были удалены:
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
, но какова альтернатива для макетов?
Ответы
Ответ 1
Похоже, что из Express 3 функция макета делегирована ответственности за механизмы шаблонов. Вы можете использовать ejs-locals (https://github.com/RandomEtc/ejs-locals) для макета.
Установить ejs-locals
npm install ejs-locals --save
Использовать ejs-locals как движок вашего приложения в app.js
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">
...
Другой вариант - использовать выражения с частичным выражением (https://github.com/publicclass/express-partials). Оба делают то же самое, так что это просто ваш выбор.
Ответ 2
Я тоже боролся с этим. Поэтому я предложил проект github с примером для ejs и dustjs.
https://github.com/chovy/express-template-demo
Я не уверен, что разница между частичным и включенным, вам не нужно явно передавать данные в include. Не уверен, почему вы хотите частичного.
Но для макета вы просто указываете такой блок:
//layout.ejs
<html>
<%- body %>
</html>
//page1.ejs
<% layout('layout') -%>
This is loaded from page 1 and overrides <%- body %> in the layout.ejs.
Если кто-то хочет добавить больше примеров, просто отправьте запрос на перенос.
Ответ 3
Вы можете имитировать раскладки EJS в Express 2.x с опцией "включить". См. Мой ответ здесь:
fooobar.com/info/326367/...