метеор: условная подписка на уровне шаблона

я повторно использую тот же шаблон в другом маршруте с другим аргументом данных, но используя ту же публикацию...

если я делаю обычный pub/sub, данные публикуются, как и ожидалось. но когда я делаю условную публикацию/подписку, как показано ниже, я не могу подписаться на данные. журнал консоли возвращает пустой массив,,,

сервер/publication.js

Meteor.publish('ACStats', function(cId, uId) {
    var selectors = {cId:cId, uId:uId};
    var options = {
        fields: {qId:0}
    };
    return ACStats.find(selectors,options);
});

клиент/при создании

Template.channelList.onCreated(function() {
  this.disable = new ReactiveVar('');
  if (FlowRouter.getRouteName() === 'profile') {
    var self = this;
    self.autorun(function() {
      var penName = FlowRouter.getParam('penName');
      var u = Meteor.users.findOne({slugName:penName});
      if (u) {var uId = u._id;}
      Meteor.subscribe('ACStats', null, uId);
    });
  } else{
    var self = this;
    self.autorun(function() {
      var channelName = FlowRouter.getParam('channel');
      var c = Channels.findOne({title:channelName});
      if (c) {var cId = c._id;}
      Meteor.subscribe('ACStats', cId, null);
    });
  }
});

консоль

ACStats.find().fetch() //return empty array

кто-нибудь понял мою ошибку ..??

Огромное спасибо....


person Community    schedule 05.12.2015    source источник
comment
Есть пара мест, где могут быть ошибки. (1) Ваши находки для Meteor.users или Channels не дали результатов. (2) В ваших ACStats документах cId или uId отсутствует вместо того, чтобы быть определено как null.   -  person Michel Floyd    schedule 05.12.2015


Ответы (1)


Вы можете сделать две публикации:

Meteor.publish ('ACStatsChannels', cId, function() {
});
Meteor.publish ('ACStatsUsers', uId, function() {
})

А потом подписаться так:

Template.channelList.onCreated(function() {
   this.disable = new ReactiveVar('');
   var self = this;
   self.autorun(function() {
      if (FlowRouter.getRouteName() === 'profile') {
          var penName = FlowRouter.getParam('penName');
          self.subscribe('ACStatsUsers', penName);
      } else {
          var channelName = FlowRouter.getParam('channel');
          self.subscribe('ACStatsChannels', channelName);
    }
  });
});
person Viktor Marinov    schedule 13.01.2016
comment
heloo,, @ViktorMarinov, спасибо за ваш ответ,,,, yapp, это то, что я реализую в настоящее время... я подозреваю, что нулевой аргумент в подписке на метеор еще не поддерживается... я публикую подробности здесь: forums.meteor.com/t/pass-null-argument-on-subscription/15143 ... есть комментарий..?? - person ; 13.01.2016