Meteor Server Reaktivität
Ich habe eine App mit zwei Sammlungen
Books = new Meteor.Collection("books");
Chapters = new Meteor.Collection("chapters");
Wo die Dokumente ungefähr so aussehen:
Book = {
_id : BookId,
users_who_can_view_this_book : [userId, userId]
}
Chapter = {
book : BookId
}
Auf dem Server veröffentliche ich Bücher und Kapitel wie folgt:
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}});
});
Auf dem Client abonniere ich einfach so:
Meteor.subscribe('books');
Meteor.subscribe('chapters')
Wenn ein Benutzer Zugriff auf ein Buch hat, möchte ich, dass der Kunde das Buch und die entsprechenden Kapitel erhält. Dies funktioniert einwandfrei beim erstmaligen Laden.
Nun auf derServer Ich möchte in der Lage sein, Benutzer zu der Liste in den Buchdokumenten hinzuzufügen oder daraus zu entfernen, und wenn ich das tue, aktualisiere ich den Client mit den neuen Kapiteln. Ab sofort erhält der Client nur die Aktualisierung der Bücher, aber die Kapitel, die sich auf dieses Buch beziehen, werden dem Client nicht hinzugefügt / daraus entfernt.
Ich verstehe, dass ich die Art und Weise, wie meine Kapitel veröffentlicht werden, ändern muss. Ich habe in den Dokumenten nach cursor.observe und cursor.observeChange gesucht, aber ich kann wirklich nicht verstehen, wie man sie in diesem Fall verwendet. Ich habe auch studiertdiese Antwort aber ich verstehe nicht alles. Ich würde gerne erklären, zu welchen Teilen dieser Antwort ich Fragen habe, aber da es sich um einen etwas anderen Fall handelt, weiß ich nicht, ob er relevant ist. Auf jeden Fall wäre eine Anleitung zu diesem oder einem funktionierenden Beispiel sehr dankbar!