2016-03-08 3 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() до того, как обратные вызовы имели возможность запускать. Пользовательские документы должны в конечном итоге отображаться на клиенте сразу после сообщения готовности. – 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); 
    } 
}); 

Если это не работает, дайте мне знать, и я буду изучать его дальше.