Adding Layouts to Views Edit Page
Views can have a secondary template that wraps their main template. Like templates, layouts are Handlebars templates that will be inserted inside the view's tag.
To tell a view which layout template to use, set its layoutName
property.
To tell the layout template where to insert the main template, use the Handlebars {{yield}}
helper.
The HTML contents of a view's rendered template
will be inserted where the {{yield}}
helper is.
First, you define the following layout template:
1 2 3 4 5 |
<script type="text/x-handlebars" data-template-name="my_layout"> <div class="content-wrapper"> {{yield}} </div> </script> |
And then the following main template:
1 2 3 |
<script type="text/x-handlebars" data-template-name="my_content"> Hello, <b>{{view.name}}</b>! </script> |
Finally, you define a view, and instruct it to wrap the template with the defined layout:
1 2 3 4 5 |
AViewWithLayout = Ember.View.extend({ name: 'Teddy', layoutName: 'my_layout', templateName: 'my_content' }); |
This will result in view instances containing the following HTML
1 2 3 |
<div class="content-wrapper"> Hello, <b>Teddy</b>! </div> |
Applying Layouts in Practice
Layouts are extremely useful when you have a view with a common wrapper and behavior, but its main template might change. One possible scenario is a Popup View.
You can define your popup layout template:
1 2 3 4 5 6 7 8 |
<script type="text/x-handlebars" data-template-name="popup"> <div class="popup"> <button class="popup-dismiss">x</button> <div class="popup-content"> {{yield}} </div> </div> </script> |
Then define your popup view:
1 2 3 |
App.PopupView = Ember.View.extend({ layoutName: 'popup' }); |
Now you can re-use your popup with different templates:
1 2 3 4 5 6 7 8 9 10 |
{{#view App.PopupView}} <form> <label for="name">Name:</label> <input id="name" type="text" /> </form> {{/view}} {{#view App.PopupView}} <p> Thank you for signing up! </p> {{/view}} |