我目前有这样的用户的pub / sub方法:
Meteor.subscribe("userData");
Meteor.publish('userData', function () {
return Meteor.users.find({}, {fields: {profile: 1}});
});
这很好用。但是如果我想在观察回调中添加几个字段,我会遇到问题,如下所示:
Meteor.publish('userData', function () {
var self = this;
var users = Meteor.users.find({}, {fields: {profile: 1}});
var subHandle = users.observe({
added: function (fields) {
fields.profile.postCount = Post.find({'owner': fields._id}).count();
self.added("userData", fields._id, fields);
},
changed: function(newObj, oldObj){
fields.profile.postCount = Post.find({'owner': fields._id}).count();
self.changed("userData", newObj._id, newObj);
},
removed: function(obj) {
self.removed("userData", obj._id);
}
});
self.ready();
self.onStop(function () {
subHandle.stop();
});
});
问题是,当我尝试在客户端找到用户时,如果我已登录(Meteor.users.find().fetch()
在控制台内),我自己只能找到一个用户。我看到该发布已完成(控制台内的网络WS部分),所以我知道有多个用户被推送到客户端。
所以我显然做错了什么,有人能指出我正确的方向吗?
答案 0 :(得分:0)
这里可能存在多个问题,但引起我注意的是,您在added
/ changed
/ removed
回调中使用了出版物的名称,而不是集合名称('users'
)。尝试修改observe
,如下所示:
var subHandle = users.observe({
added: function (fields) {
fields.profile.postCount = Post.find({'owner': fields._id}).count();
self.added('users', fields._id, fields);
},
changed: function(newObj, oldObj){
fields.profile.postCount = Post.find({'owner': fields._id}).count();
self.changed('users', newObj._id, newObj);
},
removed: function(obj) {
self.removed('users', obj._id);
}
});
如果这不起作用,请告诉我,我会进一步检查。