В споделена зона:
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
}
На сървъра:
Meteor.publish("searchUsers", getSearchUsers);
Meteor.publish("friendUsers", getFriendUsers);
На клиента:
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();
}
});
Ключовият извод от това е, че това, което се случва зад кулисите, когато данните се прехвърлят по кабела, не е очевидно. Метеорът изглежда комбинира записите, които са били съпоставени в различните заявки на сървъра и да ги изпратите на клиента. След това клиентът трябва да изпълни отново същата заявка, за да ги раздели.
Например, да речем, че имате 20 записа в колекция от страна на сървъра. След това имате две публикации:първото съвпада с 5 записа, второто съвпада с 6, от които 2 са еднакви. Meteor ще изпрати 9 записа. След това на клиента изпълнявате точно същите заявки, които сте изпълнили на сървъра, и трябва да получите съответно 5 и 6 записа.