2016-03-08 64 views
1

我現在有這樣的用戶發佈/訂閱方法:流星的用戶觀察光標

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())。而且我看到發佈已完成(控制檯內的Network WS部分),所以我知道有多個用戶被推送到客戶端。

因此,我明顯做錯了什麼,有人可以指點我正確的方向嗎?

+0

嘗試檢查客戶端的'userData'集合。你必須先創造它。 –

+1

觀察函數異步運行,因此您在回調有機會運行之前調用ready()。用戶文檔應該在ready消息之後最終顯示在客戶端上。 – sba

回答

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

如果不行,讓我知道,我會進一步研究它。