流星的乐观 ui 坏了,当 Meteor.publish 与 "createdAt: {$gte: start, $lt: now}"

Meteor's optimistic ui broken, when Meteor.publish with "createdAt: {$gte: start, $lt: now}"

故事: 我已经将 meteor 1.4 与 angular 1 一起使用。我想通过使用 Meteor.publish 将 "Todo" 设为私有,这是客户端代码:

var now = new Date();
var start = new Date();
start.setHours(0, 0, 0, 0);
this.helpers({
    todos() {
    return Todos.find({createdAt: {$gte: start, $lt: now}, userId: Meteor.userId()}, {
            sort: {
                createdAt: -1
            }
        });
    },
    currentUser() {
        return Meteor.user();
    }
});

问题: 当我使用 Meteor.publish 和 "userId" 时,待办事项列表 ui 运行良好,它可以在我添加一个新的待办事项后自动更新 ui。但是在我用 createdAt: {$gte: start, $lt: now} 添加 Meteor.publish 过滤器后,我必须刷新 (F5) 页面,然后我才能看到新的待办事项。这是服务器端发布代码:

Meteor.publish('todos', function tasksPublication() {
     var now = new Date();
     var start = new Date();
     start.setHours(0, 0, 0, 0);
     return Todos.find({createdAt: {$gte: start, $lt: now}, userId: this.userId});
});

有人知道怎么解决吗?

我已经修复了这个错误。由于我没有深入了解 Meteor 的缓存,下面的原因是我的猜测:

  1. 客户端 UI 正在绑定到缓存 (miniMongo) 的 "Todos.find({createdAt: {$gte: start, $lt: now}, userId: this.userId})"
  2. 插入一个新todo后,会先插入到miniMongo中
  3. miniMongo 重新运行 #1 查询,但是"now" 是#1 次的"now"。并发现 #2 的结果不合适。所以它从客户端删除了新记录。

这是我的零钱: Code Change

如果你有什么不同的想法,请告诉我。

谢谢。