1

故事: 我使用了 angular 1 的流星 1.4。我想通过使用将“Todo”设为私有Meteor.publish,这是客户端代码:

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”时,todo list ui 运行良好,在我添加一个新的 todo 后它可以自动更新 ui。但是在我添加Meteor.publish过滤器后createdAt: {$gte: start, $lt: now},我必须刷新(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});
});

谁知道怎么修它?

4

1 回答 1

0

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

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

这是我的更改: 代码更改

如果您有任何不同的想法,请告诉我。

谢谢。

于 2016-12-19T10:01:28.847 回答