Meteor - Stop Tracker Autorun при уничтожении шаблона (пользователь покидает страницу)

В моем шаблоне Meteor у меня есть функция ohlcInit() которая автоматически ohlcInit(), когда новые данные доступны в Mongo:

Template.Live.rendered = function(){

  function ohlcInit() {
    // computations run here
  }

  Tracker.autorun(function() {
      ohlcInit();
  });
};

Это отлично работает, пока пользователь находится на странице/шаблоне, в котором все это определено, но как только пользователь переходит к другому URL-адресу на сайте и шаблон уничтожается, в консоль попадают ошибки:

Исключение из функции повторной компиляции Tracker: undefined не является функцией TypeError: undefined не является функцией ohlcInit (http://localhost: 3000/client/views/live/live.js? Dd5fb618daf9ea9e233c37caaaa9ed200fe3e987: 271: 33) по адресу http://localhost: 3000/client/views/live/live.js? dd5fb618daf9ea9e233c37caaaa9ed200fe3e987: 306: 5 в Tracker.Comput._compute (http://localhost: 3000/packages/tracker.js? 192a05cc46b867dadbe8bf90dd961f6f8fd1574f: 288: 36) в Tracker.Comput._recompute (http://localhost: 3000/packages/tracker.js? 192a05cc46b867dadbe8bf90dd961f6f8fd1574f: 302: 14) в Tracker.flush(http://localhost: 3000/packages/tracker.js? 192a05cc46b867dadbe8bf90dd961f6f8fd1574f: 430: 14)

Как вы безопасно останавливаете/завершаете вычисление автозапуска при переходе пользователя на новый URL/шаблон?
Я использую iron:router.

Ответы

Ответ 1

Используйте новую функцию Template.autorun, которая автоматически очищается после уничтожения шаблона. Для того, чтобы использовать его внутри rendered обратного вызова, просто замените Tracker.autorun с this.autorun.