Hvis du vil have denne opsætning til at fungere, skal du gøre følgende:
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();
});
});
Nej på klientsiden skal du definere en samling kun på klientsiden:
directories = new Meteor.Collection('thisNameMatters');
og abonner på det tilsvarende datasæt:
Meteor.subscribe('thisNameDoesNotMatter');
Dette burde virke nu. Fortæl mig, hvis du mener, at denne forklaring ikke er klar nok.
REDIGER
Her er self.added/changed/removed
metoder fungerer mere eller mindre som en begivenhedsformidler. Kort sagt giver de instruktioner til hver klient, der ringede
Meteor.subscribe('thisNameDoesNotMatter');
om de opdateringer, der skal anvendes på klientens samling med navnet thisNameMatters
forudsat at denne samling eksisterer. Navnet - der sendes som den første parameter - kan vælges næsten vilkårligt, men hvis der ikke er nogen tilsvarende samling på klientsiden, vil alle opdateringer blive ignoreret. Bemærk, at denne samling kun kan være på klientsiden, så den behøver ikke nødvendigvis at svare til en "rigtig" samling i din database.
Returnerer en markør fra din publish
metode er det kun en genvej til ovenstående kode, med den eneste forskel, at navnet på en faktisk samling bruges i stedet for vores theNameMatters
. Denne mekanisme giver dig faktisk mulighed for at oprette så mange "spejle" af dine datasæt, som du ønsker. I nogle situationer kan dette være ret nyttigt. Det eneste problem er, at disse "samlinger" vil være skrivebeskyttede (hvilket giver fuldstændig mening BTW), fordi hvis de ikke er defineret på serveren, eksisterer de tilsvarende `indsæt/opdater/fjern'-metoder ikke.