This seems like a basic one but i can't get Iron Router to render my template in the correct place on the page.
In my router controller I have:
Router.configure({
loadingTemplate: 'loading',
notFoundTemplate: 'notFound'
});
Router.map(function () {
this.route('home', {
path: '/',
template: 'home',
layoutTemplate: 'layout'
});
this.route('posts', {
});
this.route('post', {
path: '/posts/:_id'
});
});
In the layout html page I have:
<body>
<!-- some other static page stuff here -->
<div class="container">
<template name="layout">
{{yield}}
</template>
</div>
</body>
Basic version of home template looks like:
<template name="home">
<h1>Home Page</h1>
</template>
I have tried a few variation on this but the home template is always rendered at the bottom of the layout template just before the closing body tag rather than in the div.container
You've placed the tags a bit incorrectly.
Templates need to be on their own & the body tag should be empty:
<body>
<!-- There isn't anything here really -->
</body>
<template name="layout">
<div class="container">
{{>yield}}
</div>
</template>
This should work for your home
route but not your post
ones, because you haven't given them a layout template.
You can set a universal layout so it would work on posts
and home
(if you didn't set a layout template there - which overrides the one below) using:
Router.configure({
loadingTemplate: 'loading',
notFoundTemplate: 'notFound',
layoutTemplate: 'layout'
});
So iron-router places your layoutTemplate in body for you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With