meteormeteor-blazemeteor-tracker

How can you prevent cursor item helpers from being rerun when the limit changes?


Here is a modified leaderboard:

http://meteorpad.com/pad/CgEG3uYBZDceTERXA/Leaderboard

I added a limit to the players cursor and display scorePlusOne instead of score.

Template.leaderboard.helpers({
  players: function () {
    return Players.find({}, { sort: { score: -1, name: 1 } , limit: Session.get('limit')});

Template.player.helpers({
  scorePlusOne: function() {
    console.log('scorePlusOne',this.name);
    return this.score + 1;

When I increase the limit from 1 to 2, the first player template is not rerendered, but the scorePlusOne helper is rerun.

enter image description here

I don't want any helpers of already-rendered templates to rerun unless they contain reactive data that changes. Is there any way to achieve this behavior?


Solution

  • Cache template helper results in ReactiveVars and move the helper code to template autoruns:

    https://github.com/meteor/meteor/issues/4960#issuecomment-132715347