Сравните Meteor.subcribe () с this.subscribe () [Meteor + Blaze]

У меня две страницы / шаблон,

  1. Панель инструментов (также содержит некоторые данные, специфичные для пользователя).
  2. Пользователи.

Я использую Meteor 1.5 с шаблоном Blaze. Целевая страница - это панель инструментов. Я использую общую подписку на Коллекцию Users в обоих шаблонах.

Сценарий 1

Когда я использую Meteor.subscribe('Users') в Личном кабинете template.onCreated() и перехожу на страницу Пользователи, я вижу, что некоторые уже подписанные данные возвращаются из подписки Личного кабинета.

КОД:

Template.DashBoard.onCreated(function(){
    Meteor.subscribe('Users');
});

Template.Users.onCreated(function(){
    Meteor.subscribe('Users');
});

Сценарий 2

Когда я использую this.subscribe('Users') в Личном кабинете template.onCreated() и перехожу на страницу Пользователи, я получаю здесь новую подписку, и данные из подписки Личного кабинета не переносятся.

КОД:

Template.DashBoard.onCreated(function(){
    this.subscribe('Users');
});

Template.Users.onCreated(function(){
    this.subscribe('Users');
});

Вопрос

В чем разница между Meteor.subscribe('Users') и this.subscribe('Users')? Каковы могут быть последствия использования this.subscribe('Users')?


person Ankur Soni    schedule 07.04.2018    source источник


Ответы (1)


Как объясняется в документации Meteor, this.subscribe в коде шаблона будет автоматически отписываться при уничтожении экземпляра шаблона.

Принимая во внимание, что Meteor.subscribe необходимо явно отказаться от подписки, если вы этого хотите.

Решение использовать тот или иной зависит от структуры вашего приложения. Если вы уверены, что данные актуальны только для данного шаблона, используйте подписку с ограничением по шаблону, то есть this.subscribe.

Если данные используются на нескольких страницах, либо используйте «глобальную» форму, либо ограничьте область действия на более высоком уровне шаблона (тот, который сохраняется на ваших страницах, например, в макете).

person ghybs    schedule 07.04.2018