【发布时间】:2016-03-09 02:08:55
【问题描述】:
我目前有这样的用户发布/订阅方法:
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 部分),所以我知道有多个用户被推送到客户端。
所以我显然做错了什么,有人能指出我正确的方向吗?
【问题讨论】:
-
尝试在客户端签入
userData集合。你必须先创建它。 -
观察函数异步运行,因此您在回调有机会运行之前调用了 ready()。用户文档最终仍应显示在客户端上,就在就绪消息之后。