【问题标题】:How to show the "upcoming" content based on its date on Docpad?如何根据 Docpad 上的日期显示“即将发布”的内容?
【发布时间】:2013-09-09 09:28:36
【问题描述】:

我正在尝试宣传页面上的内容。该内容应该是即将到来的内容,即所有相同类型中的下一个(“事件”)。

元数据如下所示:

---
layout: event
date: 2013-12-11
title: Cool event
---

docpad.coffee 文件集合配置如下所示(使用 moment.js):

collections:
    events: (database) ->
        database.findAllLive(type: "event", [date: -1])

    next_events: (database) ->
        @getCollection("events")
            .setFilter("upcoming", (event, searchString) ->
                return moment(event.eventDate, "YYYY-MM-DD").diff(moment()) < 0
            )

终于在 index.html.eco 中:

<% for event in @getCollection("next_events").toJSON(): %>
    <h3><%= event.title %></h3>
<% end %>

问题:它显示了我所有的事件,而不仅仅是未来的事件。当我使用events 集合时,它按预期工作(所有事件按日期顺序排列)。但是当我使用next_events 集合时没有区别。我知道要只显示一个,我需要使用&lt;% for event in @getCollection("next_events").toJSON()[0]: %&gt; 之类的内容来减少集合内容。

非常感谢任何指针。

【问题讨论】:

    标签: coffeescript docpad eco


    【解决方案1】:

    试试这个:

    next_events: (database) ->
        @getCollection("events")
            .createLiveChildCollection()
            .setFilter("upcoming", (event, searchString) ->
                return moment(event.eventDate, "YYYY-MM-DD").diff(moment()) < 0
            )
            .query()
    

    【讨论】:

    • 不起作用,它仍然显示它们。如果我更改比较器(从 ),它不会显示任何内容。我很确定问题出在过滤部分。我尝试了 moment.js 的不同功能,但没有成功。
    • event 实际上是一个模型,所以如果eventDate 是一个属性,你可能需要做event.get('eventDate')
    • 也许 DocPad 需要提供交互式 CLI 来访问数据库,以便您可以查询和结果过期
    • 愚蠢的我,我知道 Backbone,但忘记了这个细节。它几乎起作用了,我调整了两件事:日期元数据是核心 Docpad 并且是一个日期对象,而不是一个字符串,所以我没有用 moment 解析它,我只是把它包裹在一个像 "moment(event.get (“日期”))” ;在模板中,我检索到这样的事件:“”。然后我只使用了新创建的 next_event var。非常感谢,你是男人! +1 用于对 DB 的 cli 访问。
    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2019-05-31
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多