Wenn Sie möchten, dass dieses Setup funktioniert, müssen Sie Folgendes tun:
Meteor.publish('thisNameDoesNotMatter', function () {
var self = this;
var handle = Meteor.users.find({}, {
fields: {emails: 1, profile: 1}
}).observeChanges({
added: function (id, fields) {
self.added('thisNameMatters', id, fields);
},
changed: function (id, fields) {
self.changed('thisNameMatters', id, fields);
},
removed: function (id) {
self.removed('thisNameMatters', id);
}
});
self.ready();
self.onStop(function () {
handle.stop();
});
});
Nein, auf der Clientseite müssen Sie eine Nur-Client-seitige Sammlung definieren:
directories = new Meteor.Collection('thisNameMatters');
und den entsprechenden Datensatz abonnieren:
Meteor.subscribe('thisNameDoesNotMatter');
Das sollte jetzt funktionieren. Lassen Sie es mich wissen, wenn Sie der Meinung sind, dass diese Erklärung nicht klar genug ist.
BEARBEITEN
Hier der self.added/changed/removed
Methoden fungieren mehr oder weniger als Event-Dispatcher. Kurz gesagt, sie geben jedem Kunden, der anruft, Anweisungen
Meteor.subscribe('thisNameDoesNotMatter');
über die Aktualisierungen, die auf die Sammlung des Clients mit dem Namen thisNameMatters
angewendet werden sollten vorausgesetzt, dass diese Sammlung existiert. Der Name, der als erster Parameter übergeben wird, kann fast beliebig gewählt werden, aber wenn es auf der Client-Seite keine entsprechende Sammlung gibt, werden alle Aktualisierungen ignoriert. Beachten Sie, dass diese Sammlung nur clientseitig sein kann, also nicht unbedingt einer "echten" Sammlung in Ihrer Datenbank entsprechen muss.
Zurückgeben eines Cursors von Ihrem publish
-Methode ist es nur eine Abkürzung für den obigen Code, mit dem einzigen Unterschied, dass der Name einer tatsächlichen Sammlung anstelle unseres theNameMatters
verwendet wird . Dieser Mechanismus ermöglicht es Ihnen, so viele "Spiegelungen" Ihrer Datensätze zu erstellen, wie Sie möchten. In einigen Situationen kann dies sehr nützlich sein. Das einzige Problem ist, dass diese "Sammlungen" schreibgeschützt sind (was übrigens absolut sinnvoll ist), denn wenn sie nicht auf dem Server definiert sind, existieren die entsprechenden `insert/update/remove'-Methoden nicht.