Оптимистичный пользовательский интерфейс Meteor прервался, когда Meteor.publish с "созданным: {$gte: start, $lt: сейчас}"
Story: я использовал meteor 1.4 с angular 1. И я хочу сделать "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" интерфейс списка задач работал хорошо, он мог автоматически обновлять интерфейс после того, как я добавил один новый список задач. Но после того, как я добавил 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});
});
Кто-нибудь знает, как это исправить?
1 ответ
Решение
Я исправил эту ошибку. Поскольку я не был глубоко в тайнике Метеора, причина была моей догадкой:
- Пользовательский интерфейс клиента отправлялся в кэш (miniMongo) "Todos.find({созданный: {$gte: start, $lt: сейчас}, userId: this.userId})" "
- После вставки одного нового todo, он сначала будет вставлен в miniMongo.
- miniMongo повторно запускает запрос № 1, но "сейчас" - это время "сейчас" № 1. И нашел результат № 2 не подходит. Таким образом, он удалил новую запись из клиента.
И вот мое изменение: изменение кода
если у вас есть другая идея, пожалуйста, дайте мне знать.
Благодарю.