Reatividade do servidor Meteor
Eu tenho um aplicativo com duas coleções
Books = new Meteor.Collection("books");
Chapters = new Meteor.Collection("chapters");
onde os documentos se parecem muito com isso:
Book = {
_id : BookId,
users_who_can_view_this_book : [userId, userId]
}
Chapter = {
book : BookId
}
No servidor eu publico livros e capítulos assim:
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}});
});
No cliente eu acabei de me inscrever assim:
Meteor.subscribe('books');
Meteor.subscribe('chapters')
Então, se um usuário tiver acesso a um livro, eu quero que ele receba o livro e seus capítulos correspondentes. Isso funciona bem na carga inicial.
Agora, noservidor Eu quero ser capaz de adicionar ou remover usuários para / da lista nos documentos do livro e quando eu faço isso, atualizo o cliente com os novos capítulos. A partir de agora, o cliente só obtém a atualização nos livros, mas os capítulos referentes a esse livro não são adicionados / removidos do cliente.
Eu entendo que preciso mudar a forma como a publicação dos meus capítulos funciona. Eu olhei para os docs para cursor.observe e cursor.observeChange, mas eu realmente não consigo entender como usá-los neste caso. Eu também estudeiesta resposta mas eu não entendo tudo. Eu ficaria feliz em explicar em que partes da resposta eu tenho perguntas, mas como é um caso um pouco diferente, não sei se é relevante. De qualquer forma, alguma orientação sobre isso ou um exemplo de trabalho seria muito apreciada!