Ответ 1
Используйте новую функцию Template.autorun, которая автоматически очищается после уничтожения шаблона. Для того, чтобы использовать его внутри rendered
обратного вызова, просто замените Tracker.autorun
с this.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
.
Используйте новую функцию Template.autorun, которая автоматически очищается после уничтожения шаблона. Для того, чтобы использовать его внутри rendered
обратного вызова, просто замените Tracker.autorun
с this.autorun
.