流星的乐观 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 的缓存,下面的原因是我的猜测:
- 客户端 UI 正在绑定到缓存 (miniMongo) 的 "Todos.find({createdAt: {$gte: start, $lt: now}, userId: this.userId})"
- 插入一个新todo后,会先插入到miniMongo中
- miniMongo 重新运行 #1 查询,但是"now" 是#1 次的"now"。并发现 #2 的结果不合适。所以它从客户端删除了新记录。
这是我的零钱:
Code Change
如果你有什么不同的想法,请告诉我。
谢谢。
故事:
我已经将 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 的缓存,下面的原因是我的猜测:
- 客户端 UI 正在绑定到缓存 (miniMongo) 的 "Todos.find({createdAt: {$gte: start, $lt: now}, userId: this.userId})"
- 插入一个新todo后,会先插入到miniMongo中
- miniMongo 重新运行 #1 查询,但是"now" 是#1 次的"now"。并发现 #2 的结果不合适。所以它从客户端删除了新记录。
这是我的零钱: Code Change
如果你有什么不同的想法,请告诉我。
谢谢。