Dariusz Sikorski
Dariusz Sikorski

Reputation: 4407

How to clear all yields when route is changed in iron-router

Iron router allows to render different content into layout template, or load smaller templates into yields, but when user goes to different path, a content from previous yields does not unload templates inside them, until you force router to render null as a template into yields.

I have written a simple loop, which unload all yields before rendering new view, but i think there should be easier solution.

Router.route('/docs/container/', function () {

  // render base layout for view
  this.render('view');

  // clear all parts
  var yields = [
    'viewSideLeft',
    'viewSideRight',
    'viewFooter',
    'viewTopbar',
    'pageContent',
    'pageSideLeft',
    'pageSideRight',
    'pageFooter',
    'pageTopbar'
  ];
  for (var i = 0; i < yields.length; i++) {
      this.render(null, {to: yields[i]});
  }

  // and render only this parts which you need:
  this.render('viewDocsSideLeft', {to: 'viewSideLeft'});
  this.render('viewDocsSideRight', {to: 'viewSideRight'});
  this.render('viewDocsFooter', {to: 'viewFooter'});
  this.render('viewDocsTopbar', {to: 'viewTopbar'});
  this.render('pageDocsContainer', {to: 'pageContent'});
  // this.render('pageDocsContainerSideLeft', {to: 'pageSideLeft'});
  // this.render('pageDocsContainerSideRight', {to: 'pageSideRight'});
  // this.render('pageDocsContainerFooter', {to: 'pageFooter'});
  // this.render('pageDocsContainerTopbar', {to: 'pageTopbar'});

});

Here is a github issue related to this problem and it seems it has not been solved yet. https://github.com/iron-meteor/iron-router/issues/174

Upvotes: 0

Views: 200

Answers (0)

Related Questions