Meteor观察用户光标

时间:2016-03-08 16:21:14

标签: meteor meteor-accounts

我目前有这样的用户的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部分),所以我知道有多个用户被推送到客户端。

所以我显然做错了什么,有人能指出我正确的方向吗?

1 个答案:

答案 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);
    }
});

如果这不起作用,请告诉我,我会进一步检查。