0

是否可以将 Docpad 用作静态站点生成器,该生成器还输出可供客户端 JS 应用程序使用的 json 文件?

我正在使用 Docpad 作为静态站点生成器构建一个网站,并且我有一个事件部分,我希望事件主页在其中列出使用 Docpad 发布的所有事件(带有指向事件详细信息页面的链接)。

我想要做的是通过循环一个包含所有事件的集合来生成事件列表,但我也想让列表更具交互性和可排序性(因为我们有各种各样的事件并且想要制作人们很容易找到感兴趣的事件)。

我想做的是将事件列表输出到 JSON 文件,我们可以将其传递给 AngularJS 应用程序,该应用程序执行事件的呈现、排序和显示。

我知道 Docpad 可以用来生成 xml,但是可以使用 Docpad 生成包含所需数据的 json 文件吗?到目前为止,我的尝试都失败了,这就是为什么我要问我所问的是否可能。我的备份是使用 XML,但我更喜欢 JSON,因为 Angular 可以原生使用它。

TIA。

4

2 回答 2

1

您是否尝试过使用现有插件:

或者至少看看他们的代码并针对您的用例进行修改?

于 2015-04-15T21:24:02.423 回答
1

如果我正确理解了这个问题,那么您应该能够在 Docpad 中生成一个 JSON 文件,几乎与您处理任何其他文档的方式相同。除了选择你最喜欢的模板插件之外,没有什么特别需要做的。我使用ECO模板插件来生成我的帖子的 JSON 文件:

<% posts = @getCollection('posts').toJSON() %>
<%content = posts[0].contentRenderedWithoutLayouts or posts[0].content%>
<%#handle first item manually just to avoid the last array member having a hanging comma%>
[{
  'title': '<%-posts[0].title%>',
  'date' : '<%-posts[0].date.toDateString()%>',
  'content': '<%=@truncateText(content,700)%>',
  'slug': '<%-posts[0].slug%>',
  'url': '<%-posts[0].url%>'
<% posts = posts.slice(1)%>
<% for post in posts: %>
  <%content = post.contentRenderedWithoutLayouts or post.content%>
  },{
    'title': '<%-post.title%>',
    'date' : '<%-post.date.toDateString()%>',
    'content': '<%=@truncateText(content,700)%>',
    'slug': '<%-post.slug%>',
    'url': '<%-post.url%>'
<%end%>
}]

在此之后,只需给模板文件双扩展名:'json.eco'

实际上,我在这里使用了一种类似的技术来合并和缩小 css 文件,我认为您可能可以使用这种方法来生成任何文档格式。

编辑(事后考虑)

作为专门用于 JSON 的更简单的解决方案,您可以使用 JavaScript 的内置函数将对象转换为 JSON。

<%-JSON.stringify(@getCollection('posts').toJSON())%>

或获得格式良好的版本

<%-JSON.stringify(@getCollection('posts').toJSON(),null,2)%>
于 2015-04-15T10:00:09.563 回答