修改Meteor-React ToDo列表示例以显示在时间范围内创建的列表项

时间:2015-10-05 16:33:35

标签: javascript mongodb meteor meteor-react

我正在完成Meteor-React Todo列表教程https://www.meteor.com/tutorials/react/creating-an-app

根据8.4,我们可以添加一个按钮来隐藏待检查的待办事项。我们通过查询数据库中检查等于true的项目来执行此操作。

if (this.state.hideCompleted) {
        // If hide completed is checked, filter tasks
        query = {checked: {$ne: true}};
    }

如果我只想显示在过去30分钟内创建的todo项目,即todo项目在30分钟后过期,我会将查询设置为什么?

我的猜测是这样的

if (this.state.hideExpired) {
        // If hideExpired state true, only display todo items created in the last 30 minutes.
        query = {{$ne: (currentTime - createdAt) < 30 minutes}};
    }

1 个答案:

答案 0 :(得分:0)

非常接近,但您需要使用$lte$gte代替$eq

if (this.state.hideExpired) {
  var now = new Date();
  var thirtyMinutesAgo = new Date() - 30 * 60 * 1000; //
  query = { createdAt: { $gte: thirtyMinutesAgo }}
}

请注意,此查询不会被激活。这是因为thirtyMinutesAgo不是反应变量。如果你希望物品随着年龄的增长而从列表中动态消失,那么你需要让时间本身变得反应。为此我推荐remcoder:chronos包。安装该软件包后,上面的代码将变为:

if (this.state.hideExpired) {
  var now = new Date();
  var thirtyMinutesAgo = Chronos.currentTime() - 30 * 60 * 1000; //
  query = { createdAt: { $gte: thirtyMinutesAgo }}
}
默认情况下,

Chronos.currentTime()会每秒更新一次,而thirtyMinutesAgo将是一个反应变量。