Don Boots
Don Boots

Reputation: 2166

onRendered data not appearing unless I hit back button

I have some functionality in a onRendered event that I want to run on every render.

Template.DashboardCoachPost.onRendered(function () {
  var post, postId;

  this.autorun(function() {
    postId = Router.current().params.query.p;
    reactive.isSubmitted.set(false);

    if (Template.instance().subscriptionsReady()) {
      post = Posts.find({_id: postId}).fetch()[0];
      reactive.post.set(post);

      if (post) {
        reactive.isSubmitted.set(true);  
      }
    }
  });
});

In my RouterController I have:

DashboardCoachPostController = RouteController.extend({
  subscriptions: function() {
    this.postId = Router.current().params.query.p;

    if (this.handle) {
      this.handle.stop();
    }

    if (this.postId) {
      this.handle = this.subscribe('posts', { postId: this.postId });
    }
  }
});

and my route:

Router.route('/dashboard/coach/post', {
    name: 'dashboardCoachPost',
    controller: DashboardCoachPostController,
    where: 'client',
    layoutTemplate: 'LegalLayout'
});

I have a feeling that I am not handling subscriptions properly, but I can't figure out how to get my post without this method.

Upvotes: 0

Views: 33

Answers (1)

user3636214
user3636214

Reputation: 604

Template.instance().subscriptionsReady() is used when you subscribe in a template instance. But you are subscribing in the router.

You have to choose if you let the template instance handle the subscription or the router.

Upvotes: 1

Related Questions