In un'area condivisa:
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
}
Sul server:
Meteor.publish("searchUsers", getSearchUsers);
Meteor.publish("friendUsers", getFriendUsers);
Sul cliente:
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();
}
});
Il punto chiave di questo è che ciò che accade dietro le quinte quando i dati vengono trasferiti via cavo non è ovvio. Meteor sembra combinare i record che sono stati abbinati nelle varie query sul server e inviarli al client. Spetta quindi al client eseguire nuovamente la stessa query per dividerli.
Ad esempio, supponiamo di avere 20 record in una raccolta lato server. Hai quindi due pubblicazioni:la prima corrisponde a 5 record, la seconda corrisponde a 6, di cui 2 uguali. Meteor invierà 9 record. Sul client, quindi esegui esattamente le stesse query che hai eseguito sul server e dovresti ottenere rispettivamente 5 e 6 record.