如果您希望此设置起作用,您需要执行以下操作:
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');
现在应该可以了。如果您认为这个解释不够清楚,请告诉我。
EDIT
在这里,self.added/changed/removed
方法或多或少充当事件调度程序。简而言之,他们向每一位致电的客户提供指示
Meteor.subscribe('thisNameDoesNotMatter');
关于应该应用于名为的客户端集合的更新thisNameMatters
假设这个集合存在。作为第一个参数传递的名称几乎可以任意选择,但如果客户端没有相应的集合,所有更新都将被忽略。请注意,此集合只能是客户端的,因此它不一定必须与数据库中的“真实”集合相对应。
从您的返回光标publish
方法它只是上面代码的快捷方式,唯一的区别是使用实际集合的名称而不是我们的theNameMatters
。这种机制实际上允许您根据需要创建任意数量的数据集“镜像”。在某些情况下这可能非常有用。唯一的问题是这些“集合”将是只读的(顺便说一句,这完全有意义),因为如果它们没有在服务器上定义,则相应的“插入/更新/删除”方法不存在。