I ett delat 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å servern:
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 viktigaste med detta är att det som händer bakom kulisserna när data överförs över tråden inte är uppenbart. Meteor verkar kombinera posterna som matchades i de olika frågorna på servern och skickar ner detta till klienten. Sedan är det upp till klienten att köra samma fråga igen för att dela isär dem.
Säg till exempel att du har 20 poster i en samling på serversidan. Du har sedan två publiceringar:den första matchar 5 poster, den andra matchar 6, varav 2 är lika. Meteor kommer att skicka ner 9 rekord. På klienten kör du sedan exakt samma frågor som du gjorde på servern och du bör sluta med 5 respektive 6 poster.