What you want is to only wait on the first subscription. To do that, you need to subscribe within a non-reactive scope. To reach a non-reactive scope from within a reactive scope you need to use Tracker.nonreactive(function) http://docs.meteor.com/#/full/tracker_nonreactive Doing so will make you able to access the values you want without resubscribing. In this case, I would use a route method:
Note that this is untested code I threw together. Feel free to modify and tweak.
Router.route('/path/:param', function(){
var self = this;
var computation, subscription;
Tracker.autorun(function(){
if (!computation)
computation = Tracker.currentComputation;
if (!subscription)
Tracker.nonreactive(function(){
subscription = self.subscribe('subscription', /*reactive var here */);
computation.invalidate();
});
if (subscription && subscription.ready()){
self.render('templateName');
self.subscribe('subscription', /*reactive var here */);
}
});
});
A little about what it's doing. This is making a nested computation for the route which can be rerun at will, with some global variables to keep track of the computation and the subscription which we don't want to deal with changing. We subscribe to the subscription twice, once in a non-reactive state where changes won't affect it. This is the one we use to calculate whether to render. We then render when that subscription is ready and at that point resubscribe with a reactive variable. Meteor is smart in that it recognizes the new subscription as the same as the old one, and will only update the minimongo record based on it. This allows for effectively seamless redraw. Finally there is the computation.invalidate which causes the internal computation to rerun now that this is a subscription (making the existence of the subscription reactive while the subscription itself is non reactive).