I et fælles område:
function getSearchUsers(query) {
var re = new RegExp(query, "i");
return Users.find({name: {$regex: re}});
}
function getFriendUsers() {
return Users.find({friend: true}); // or however you want this to work
}
På serveren:
Meteor.publish("searchUsers", getSearchUsers);
Meteor.publish("friendUsers", getFriendUsers);
På klienten:
Template.search.onCreated(function () {
var self = this;
self.autorun(function () {
self.subscribe("searchUsers", Session.get("searchQuery"));
});
});
Template.friends.onCreated(function () {
this.subscribe("friendUsers");
});
Template.search.helpers({
searchResults: function () {
return getSearchUsers(Session.get("searchQuery"));
}
});
Template.friends.helpers({
results: function () {
return getFriendUsers();
}
});
Det vigtigste ved dette er, at det, der sker bag kulisserne, når data bliver overført over ledningen, ikke er indlysende. Meteor ser ud til at kombinere de poster, der blev matchet i de forskellige forespørgsler på serveren, og sender dette ned til klienten. Det er så op til klienten at køre den samme forespørgsel igen for at adskille dem.
Lad os f.eks. sige, at du har 20 poster i en samling på serversiden. Du har så to udgivelser:den første matcher 5 poster, den anden matcher 6, hvoraf 2 er ens. Meteor vil sende 9 rekorder ned. På klienten kører du derefter nøjagtig de samme forespørgsler, som du udførte på serveren, og du skulle ende med henholdsvis 5 og 6 poster.