Search code examples
meteoriron-router

Iron-router's this.render function does not render


As the title says, this.render does not render a template it's provided with. This is the code in router.js:

Router.configure({
  layoutTemplate: 'main'
});
Router.route('/', function(){
  this.render('postsList');
});

The file containing the layout template, main.html:

<template name='main'>
    <div class='container'>
        <header class='navbar'>
            <div class='navbar-inner'>
                <a class='brand' href='/'>MyApp</a>
            </div>
        </header>
        <div id='main' class='row-fluid'>
            {{> yield}}
        </div>
    </div>
</template>

And the file containing the postsList template which is passed to this.render() function

<template name='postsList'>
    <div class='posts'>
        {{#each posts}}
            {{> postItem}}
        {{/each}}
    </div>
</template>

So when I go to localhost:3000/ the page displays only the main template and not the postsList template. However, there is no error, unless I completely remove Router.route(...), at which point it will display the standard 'route not found' error. Also, I tried not using the global template, but a route template, by removing Router.configure(...) and adding this.layout('main') to Router.route(...). The browser then displays nothing.


Solution

  • Your code is perfectly fine. I also came across this issue. The iron:router package seems to be missing the ejson dependancy.

    Add the ejson to your app and it should work.

    meteor add ejson

    I'm sure when iron:router is updated this will be resolved.