Публикация подписки не работает

Я новичок в метеоре, и я увидел, что лучше удалить автопубликацию. Поэтому я пытаюсь опубликовать и подписать коллекцию, чтобы получить два разных значения. В моей метеорной стороне у меня есть:

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 ответа

Решение

Pub/Sub просто заполняет вашу коллекцию клиентов Channels, Вы можете видеть это как поток, заполняющий ваше местное ведро. У вас может быть несколько подписок, заполняющих разные документы Channels коллекция, но все в конечном итоге в этой единой коллекции на клиенте.

Затем вы должны настроить свой запрос на стороне клиента, чтобы получить необходимые документы (например, Channels.find({'_id': {$nin: user.profile.channelIds}}); на Клиента, а также). Конечно, у вас могут быть разные запросы в разных шаблонах, и они могут отличаться от публикации на сервере.

См. Также Как управлять двумя подписками для отображения в одном шаблоне?

Вы не можете перемещать документ между коллекциями через подписку. Если вы подписываетесь на получение документа в коллекции Pages, который определен как новый Meteor.Collection("pages"), то независимо от того, как выглядят ваши каналы публикации, на клиенте документ будет найден в коллекции, определенной как новая.

> Meteor.Collection("pages")

, Так что удалите все следы MyPages и используйте Pages на клиенте.

Другие вопросы по тегам