Ако искате тази настройка да работи, трябва да направите следното:
Meteor.publish('thisNameDoesNotMatter', function () {
var self = this;
var handle = Meteor.users.find({}, {
fields: {emails: 1, profile: 1}
}).observeChanges({
added: function (id, fields) {
self.added('thisNameMatters', id, fields);
},
changed: function (id, fields) {
self.changed('thisNameMatters', id, fields);
},
removed: function (id) {
self.removed('thisNameMatters', id);
}
});
self.ready();
self.onStop(function () {
handle.stop();
});
});
Не от страна на клиента, трябва да дефинирате колекция само от страна на клиента:
directories = new Meteor.Collection('thisNameMatters');
и се абонирайте за съответния набор от данни:
Meteor.subscribe('thisNameDoesNotMatter');
Това трябва да работи сега. Кажете ми, ако смятате, че това обяснение не е достатъчно ясно.
РЕДАКТИРАНЕ
Тук self.added/changed/removed
методите действат повече или по-малко като диспечер на събития. Накратко казано, те дават инструкции на всеки клиент, който се е обадил
Meteor.subscribe('thisNameDoesNotMatter');
относно актуализациите, които трябва да се прилагат към колекцията на клиента с име thisNameMatters
като приемем, че тази колекция съществува. Името – предадено като първи параметър – може да бъде избрано почти произволно, но ако няма съответна колекция от страна на клиента, всички актуализации ще бъдат игнорирани. Имайте предвид, че тази колекция може да бъде само от страна на клиента, така че не е задължително да съответства на „истинска“ колекция във вашата база данни.
Връщане на курсор от вашия publish
метод, това е само пряк път за горния код, с единствената разлика, че името на действителна колекция се използва вместо нашия theNameMatters
. Този механизъм всъщност ви позволява да създавате толкова "огледала" на вашите набори от данни, колкото желаете. В някои ситуации това може да е доста полезно. Единственият проблем е, че тези „колекции“ ще бъдат само за четене (което, между другото, има смисъл), тъй като ако не са дефинирани на сървъра, съответните методи „insert/update/remove“ не съществуват.