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