Я использую docpad с механизмом эко-шаблонов и плагином partials. Смысл этого в том, чтобы вставить список фрагментов на целевую страницу.
Логичный подход (для меня) состоит в том, чтобы перебрать коллекцию фрагментов и вставить каждый фрагмент.
У меня есть следующая структура (в соответствии с руководством для начинающих по добавлению сообщений в блог и документ partials):
src
├── documents
│ ├── index.html.eco
│ ├── scripts ...
│ └── styles ...
├── files...
├── layouts
│ └── default.html.eco
└── partials
├── hello.html.eco
└── world.html.eco
Содержимое hello.html.eco:
---
title: "Hello"
isArticle: true
---
Hello
Содержимое файла world.html.eco:
---
title: "World"
isArticle: true
---
World
Содержимое default.html.eco (макет)
<html>
<head>
<title>Test Partials</title>
<%- @getBlock("styles").add(["/styles/style.css"]).toHTML() %>
</head>
<body>
<h1><%= @document.title %></h1>
<%- @content %>
<%- @getBlock("scripts").add(["/vendor/jquery.js","/scripts/script.js"]).toHTML() %>
</body>
</html>
И содержимое index.html.eco:
---
title: "Welcome"
layout: "default"
isPage: true
---
<p>Welcome to my website</p>
<% for page in @getCollection("partials").findAllLive({isArticle:true}).toJSON(): %>
<article>
<%- @partial("<%= page.url %>") %>
</article>
<% end %>
Как и выше, docpad вылетит с ошибкой Cannot read property '0' of null
. Однако, если я удалю строку <%- @partial("<%= page.url %>") %>
, тогда это сработает.
Следующая строка извлекает все файлы в каталоге partials, где для параметра isArticle установлено значение true.
<% for page in @getCollection("partials").findAllLive({isArticle:true}).toJSON(): %>
Если я изменю <%- @partial("<%= page.url %>") %>
на <p>page.url</p>
, то в выходных списках будут /hello.html и /world.html, чего я и ожидаю.
Похоже, что использование <%-
дважды в одной строке, фактически пытающееся внедрить эко, вызывает проблему.
Кто-нибудь знает, как я могу обойти это? Я пытаюсь избежать ручного кодирования @partial("<filename>")
для каждого файла, который я хочу вставить. Есть ли способ как-то передать @partial
значение page.url
?