发布订阅似乎不起作用

时间:2017-03-31 10:12:40

标签: javascript angular meteor

我是meteor的新手,我发现删除自动发布会更好。 所以我尝试发布和订阅一个集合来获得两个不同的值。 在我的流星方面,我有:

Meteor.publish('channelUser',
    function(){
    var user = Meteor.users.findOne({
        '_id':this.userId
    });
        console.log(user);
       var test = Channels.find({
            '_id': {$in : user.profile.channelIds}
        });
        return test;
    }
);

Meteor.publish('channelToJoin',
function(){
    var user = Meteor.users.findOne({
        '_id':this.userId
    });
    console.log(user);

    var test = Channels.find({'_id': {$nin: user.profile.channelIds}});
    console.log(test);
    return test;
});

在我的客户端,我有第一个组件:

this.channelSub = MeteorObservable.subscribe('channelUser').subscribe();
   this.channels = Channels.find({});

关于第二个组成部分:

 Meteor.subscribe("channelToJoin");
this.channels = Channels.find({}).zone();

但在我的客户端上,我有两个组件,我有相同的数据。 订阅中是否存在某种冲突?

我希望我能清楚地描述我的问题!

2 个答案:

答案 0 :(得分:1)

Pub / Sub只填充您的客户收藏集Channels。 您可以将其视为填充本地存储桶的流程。您可能有多个订阅填充Channels集合的不同文档,但最终都在客户端的单个集合中。

然后,您必须在客户端调整查询以获取所需的文档(例如,客户端上的Channels.find({'_id': {$nin: user.profile.channelIds}});)。当然,您可能在不同的模板中有不同的查询,也不同于服务器出版物。

另见How do I control two subscriptions to display within a single template?

答案 1 :(得分:0)

您无法通过订阅在集合之间移动文档。如果您订阅了一个在Pages集合中的文档,定义为新的Meteor.Collection("页面"),那么无论您的酒吧频道如何,在客户端上该文档将是在定义为新

的集合中找到
> Meteor.Collection("pages")

。因此,删除MyPages的所有痕迹并在客户端上使用Pages。