Docpad可以生成一个可以被客户端javascript框架使用的json文件吗?

时间:2014-06-05 07:25:03

标签: json docpad static-site

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

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

我要做的是通过循环遍历其中包含所有事件的Collection来生成事件列表,但我还希望使列表更具交互性和可排序性(因为我们有各种事件和想让人们更容易找到感兴趣的事件。

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

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

TIA。

2 个答案:

答案 0 :(得分: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%>
}]

在此之后,只需为模板文件提供双重扩展名:&#39; json.eco&#39;

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

编辑(事后补充)

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

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

或获得格式良好的版本

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

答案 1 :(得分:1)

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

或者至少看看他们的代码并修改你的用例?