0

別のルートで同じテンプレートを別のデータ引数で再利用しますが、同じパブリケーションを使用しています...

通常のパブ/サブスクライブを行うと、データは期待どおりに公開されます。しかし、以下のように条件付きのパブ/サブスクライブを行うと、データのサブスクライブに失敗します。コンソールログは空の配列を返します,,,

サーバー/publication.js

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

クライアント/onCreated

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

誰かが私の間違いを理解しました..??

どうもありがとうございます....

4

1 に答える 1

0

次の 2 つのパブリケーションを作成できます。

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);
    }
  });
});
于 2016-01-13T15:49:22.237 に答える