Zeev G
Zeev G

Reputation: 2211

Meteor router force rerender

I have the following routs

/product/123

/product/456

the template renders the product data and allows the user to drag things around

when I make a redirect to another product like that

Router.go("product",{_id:"456"});

the template updates the data but does not re-render the html. that means that what the user dragged stays in place. this is good for some cases but not for mine

the only solution that worked for me was to redirect to another page that sets clear template and it redirects to the product page

my router function:

Router.route('product/:_id/', {
    name:"product",
    data:function(){
      var data =  {product: Products.findOne({_id:objectId(this.params._id)})}
      return data;
    },
    waitOn:function(){
      return Meteor.subscribe('Products',this.params._id);
    },
    yieldTemplates: {'product': {to: 'mainArea'}},
});

I need a way to tell the router or template to reset the html

Upvotes: 0

Views: 505

Answers (1)

tarmes
tarmes

Reputation: 15442

One solution is to set up an autorun in the template's onRendered function that looks for changes to the URL parameters and the resets the template as needed. Something like this:

Template.myTemplate.onRendered(function() {

   var controller = Router.current()
   this.autorun(function() {
      var params = controller.getParams() // Reactive

      // Clear up your drag interface here
   });   
});

By accessing controller.getParams() (the route controllers reactive parameter list) the outrun will be called when you move between routes on the same template.

Upvotes: 1

Related Questions