Ve sdílené oblasti:
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
}
Na serveru:
Meteor.publish("searchUsers", getSearchUsers);
Meteor.publish("friendUsers", getFriendUsers);
Na klientovi:
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();
}
});
Klíčovým přínosem je, že to, co se děje v zákulisí při přenosu dat po drátě, není zřejmé. Zdá se, že Meteor kombinuje záznamy, které byly nalezeny v různých dotazech na serveru, a odeslat je klientovi. Poté je na klientovi, aby znovu spustil stejný dotaz a rozdělil je.
Řekněme například, že máte 20 záznamů v kolekci na straně serveru. Pak máte dvě publikace:první odpovídá 5 záznamům, druhé odpovídá 6, z nichž 2 jsou stejné. Meteor odešle 9 záznamů. Na klientovi pak spustíte přesně tytéž dotazy, které jste provedli na serveru, a měli byste skončit s 5 a 6 záznamy.