Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Meteor - Stop Tracker Autorun when Template is Destroyed (user leaves page)

In my Meteor template, I have a function called ohlcInit() that is autorun when new data is available in Mongo:

Template.Live.rendered = function(){

  function ohlcInit() {
    // computations run here
  }

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

This works great while the user is on the page/template in which this is all defined, but as soon as the user navigates to another URL on the site and the template is destroyed, errors get thrown in the console:

Exception from Tracker recompute function: undefined is not a function TypeError: undefined is not a function at ohlcInit (http://localhost:3000/client/views/live/live.js?dd5fb618daf9ea9e233c37caaaa9ed200fe3e987:271:33) at http://localhost:3000/client/views/live/live.js?dd5fb618daf9ea9e233c37caaaa9ed200fe3e987:306:5 at Tracker.Computation._compute (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:288:36) at Tracker.Computation._recompute (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:302:14) at Tracker.flush (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:430:14)

How do you safely stop/end the autorun computation when a user navigates away to a new URL/template?
I am using iron:router.

like image 411
Jon Cursi Avatar asked Nov 14 '14 07:11

Jon Cursi


1 Answers

Use the new Template.autorun function, which automatically cleans itself up after the template is destroyed. To use it inside of a rendered callback, just replace Tracker.autorun with this.autorun.

like image 185
David Weldon Avatar answered Nov 11 '22 03:11

David Weldon