我使用docpad和eco模板引擎以及partials插件。这一点是将一个片段列表插入到登录页面中。
逻辑方法(对我而言)是遍历一组片段并插入每个片段。
我有以下结构(在beginner guide on adding blog posts和partials doco之后):
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,这就是我所期望的。
似乎在一行中使用<%-
两次,有效地尝试嵌入一些eco,导致问题。
有谁知道我怎么能解决这个问题?我试图避免为我希望插入的每个文件手动编码@partial("<filename>")
。有没有办法以某种方式传递@partial
page.url
的价值?
答案 0 :(得分:0)
问题与部分插件没有关系,因为第二个<%=
语句。由于我们已经在eco,我们不需要再次逃回eco。所以第二个<%=
是多余的,因为变量可以直接引用。
我最初的标题应该是这个问题&#34;你如何引用先前设定的eco中的变量&#34;。
解决方法是对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 %>
如上所示,page.url
现在直接引用。