如何使用部分集合来根据网址插入部分内容?

时间:2014-03-12 11:56:20

标签: partials docpad eco

我使用docpad和eco模板引擎以及partials插件。这一点是将一个片段列表插入到登录页面中。

逻辑方法(对我而言)是遍历一组片段并插入每个片段。

我有以下结构(在beginner guide on adding blog postspartials 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的价值?

1 个答案:

答案 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现在直接引用。