Reaktywność serwera meteorowego
Mam aplikację z dwiema kolekcjami
Books = new Meteor.Collection("books");
Chapters = new Meteor.Collection("chapters");
gdzie dokumenty wyglądają mniej więcej tak:
Book = {
_id : BookId,
users_who_can_view_this_book : [userId, userId]
}
Chapter = {
book : BookId
}
Na serwerze publikuję takie książki i rozdziały:
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}});
});
Na kliencie po prostu subskrybuję w ten sposób:
Meteor.subscribe('books');
Meteor.subscribe('chapters')
Jeśli więc użytkownik ma dostęp do książki, chcę, aby klient otrzymał książkę i odpowiadające jej rozdziały. Działa to dobrze przy pierwszym załadowaniu.
Teraz naserwer Chcę mieć możliwość dodawania lub usuwania użytkowników do / z listy w dokumentach książki, a kiedy to robię, zaktualizuj klienta o nowe rozdziały. Obecnie klient otrzymuje aktualizację tylko w książkach, ale rozdziały dotyczące tej książki nie są dodawane / usuwane z klienta.
Rozumiem, że muszę zmienić sposób, w jaki działa moja publikacja rozdziałów. Sprawdziłem docs dla cursor.observe i cursor.observeChange, ale naprawdę nie mogę zrozumieć, jak ich użyć w tym przypadku. Studiowałem równieżta odpowiedź ale nie mam tego wszystkiego. Z przyjemnością wyjaśnię, na które części tej odpowiedzi mam pytania, ale ponieważ jest to nieco inny przypadek, nie wiem, czy jest to istotne. W każdym razie, niektóre wskazówki na ten lub przykład pracy byłyby bardzo mile widziane!