Реактивность метеорного сервера
У меня есть приложение с двумя коллекциями
Books = new Meteor.Collection("books");
Chapters = new Meteor.Collection("chapters");
где документы выглядят примерно так:
Book = {
_id : BookId,
users_who_can_view_this_book : [userId, userId]
}
Chapter = {
book : BookId
}
На сервере я публикую книги и главы, например:
Meteor.publish('books', function() {
return Books.find({ users_who_can_view_this_book : { $in : [this.userId] } });
});
Meteor.publish('chapters', function() {
var bookIds = Books.find({
users_who_can_view_this_book : {$in : [this.userId] }
}).map(function(book) {
return book._id;
});
return chapters.find({book: {$in : bookIds}});
});
На клиенте я просто подписываюсь так:
Meteor.subscribe('books');
Meteor.subscribe('chapters')
Итак, если у пользователя есть доступ к книге, я хочу, чтобы клиент получил книгу и соответствующие главы. Это отлично работает при начальной загрузке.
Теперь насервер Я хочу иметь возможность добавлять или удалять пользователей в / из списка в документах книги, а когда я это делаю, обновлять клиента новыми главами. На данный момент клиент получает только обновление книг, но главы, относящиеся к этой книге, не добавляются и не удаляются из клиента.
Я понимаю, что мне нужно изменить способ публикации моих глав. Я посмотрел на документы для cursor.observe и cursor.observeChange, но я действительно не могу понять, как использовать их в этом случае. Я также изучалэтот ответ но я не понимаю всего этого. Я был бы рад объяснить, о каких частях этого ответа у меня есть вопросы, но так как это немного другой случай, я не знаю, имеет ли это отношение. В любом случае, некоторые рекомендации по этому или рабочему примеру будут высоко оценены!