Als u wilt dat deze configuratie werkt, moet u het volgende doen:
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();
});
});
Nee, aan de clientzijde moet u een verzameling alleen aan de clientzijde definiëren:
directories = new Meteor.Collection('thisNameMatters');
en abonneer je op de bijbehorende dataset:
Meteor.subscribe('thisNameDoesNotMatter');
Dit zou nu moeten werken. Laat het me weten als je denkt dat deze uitleg niet duidelijk genoeg is.
BEWERKEN
Hier, de self.added/changed/removed
methoden fungeren min of meer als een gebeurtenisverzender. Kort gezegd geven ze instructies aan elke klant die belde
Meteor.subscribe('thisNameDoesNotMatter');
over de updates die moeten worden toegepast op de verzameling van de klant met de naam thisNameMatters
ervan uitgaande dat deze collectie bestaat. De naam - doorgegeven als de eerste parameter - kan bijna willekeurig worden gekozen, maar als er geen corresponderende verzameling aan de clientzijde is, worden alle updates genegeerd. Houd er rekening mee dat deze verzameling alleen client-side kan zijn, dus het hoeft niet noodzakelijk overeen te komen met een "echte" verzameling in uw database.
Een cursor terugbrengen van uw publish
methode is het slechts een snelkoppeling voor de bovenstaande code, met het enige verschil dat de naam van een daadwerkelijke collectie wordt gebruikt in plaats van onze theNameMatters
. Met dit mechanisme kunt u zoveel "spiegels" van uw datasets maken als u wilt. In sommige situaties kan dit best handig zijn. Het enige probleem is dat deze "verzamelingen" alleen-lezen zijn (wat volkomen logisch is trouwens) omdat als ze niet op de server zijn gedefinieerd, de bijbehorende `insert/update/remove'-methoden niet bestaan.