Отписаться от публикации в приложении метеор

Мне было интересно, есть ли правильный способ остановить подписку клиента.

Например, у меня есть 2 страницы, на первой я подписываю клиента на users публикацию, а на второй подписываюсь на projects публикацию.

Когда клиент переходит со страницы пользователей на страницу проектов, он все еще подписан на пользователей, хотя на странице проектов ему это не нужно.

Итак, мой первый вопрос: это занимает память или процессор? Когда клиент подписывается на все новые и новые публикации, когда он переходит с маршрута на маршрут.

И второе: Как правильно отписаться?? Например, когда он переходит на страницу проектов, отписаться от публикации пользователей.

Некоторые пакеты, которые я вижу, делают это. Например reactive-table.

Заранее спасибо!


person Robert    schedule 21.09.2016    source источник


Ответы (1)


Обычно, если вы хотите остановить подписку, вы делаете это с помощью Meteor.stop(). Из руководства о том, как остановить подписку:

если вы вызовете Meteor.subscribe() условно внутри реактивного контекста (например, автозапуска или getMeteorData в React) или через this.subscribe() в компоненте Blaze, тогда реактивная система Meteor автоматически вызовет this.stop() для вас в подходящее время.

Так что обычно вам не нужно останавливать подписки. Это делается автоматически.

-Что касается вашего первого вопроса, да, в зависимости от приложения это может сильно нагружать ЦП, и именно поэтому вы хотите, например, избежать нескольких публикаций/подписок в чат-приложениях.

-Что касается второго вопроса, в вашем случае вам нужно сделать подписку на уровне шаблона, а не на уровне маршрутизатора, чтобы иметь данные, которые вам нужны, только для нужного вам шаблона. см. этот пример, чтобы узнать как вы это делаете с Flow Router, и то же самое относится и к другим маршрутизаторам.

Template.blogPost.onCreated(function() {
  var self = this;
  self.autorun(function() {
    var postId = FlowRouter.getParam('postId');
    self.subscribe('singlePost', postId);  
  });
});
person Kostas    schedule 21.09.2016
comment
Спасибо за ответ. Он сделал именно то, чего я пытался достичь. Но теперь похоже, что он отображает html до того, как подписка будет сделана. И никакие данные из помощников не отображаются. Пробовал {{#if Template.subscriptionsReady}}, но результата нет. Можете ли вы помочь с этим тоже? - person Robert; 21.09.2016
comment
Трудно сказать. Везде может что-то пойти не так. Что мне помогло в таких случаях, так это пакет msavin:mongol . С помощью ctl+M вы можете увидеть, какие у вас подписки на странице, на которой вы находитесь. Поэтому сначала убедитесь, что вы действительно подписываетесь на нужную коллекцию на каждой странице. - person Kostas; 21.09.2016
comment
@Костас Чувак, ты понятия не имеешь, насколько ценна информация «this.subscribe» и «Meteor.subscribe» !!! Спасибо - person Roshdy; 17.06.2018