来自 Rails 背景,您可以拥有多个布局 - 例如匿名用户页面,然后是经过身份验证的页面。
Ember 可以做到这一点吗?
我尝试在我的 UsersRouter 中声明一个新的 templateName,但无济于事。
我还检查了本指南:http ://emberjs.com/guides/views/adding-layouts-to-views/
但它似乎没有工作:/
来自 Rails 背景,您可以拥有多个布局 - 例如匿名用户页面,然后是经过身份验证的页面。
Ember 可以做到这一点吗?
我尝试在我的 UsersRouter 中声明一个新的 templateName,但无济于事。
我还检查了本指南:http ://emberjs.com/guides/views/adding-layouts-to-views/
但它似乎没有工作:/
您可以在助手{{render}}
内部使用来显示不同的布局。if
例如,如果您有一个ApplicationController
that haslogin
和logout
action 处理程序,以及一个相应的 `loggedIn' 属性。
App.ApplicationController = Ember.Controller.extend({
loggedIn: false,
login: function() {
this.set('loggedIn', true);
},
logout: function() {
this.set('loggedIn', false);
}
});
您可以像这样绑定到loggedIn
应用程序模板中的属性。
<script type='text/x-handlebars' data-template-name='application'>
<button {{action login }}>Login</button>
<button {{action logout }}>Logout</button>
{{#if loggedIn}}
{{render 'user'}}
{{else}}
{{render 'guest'}}
{{/if}}
</script>
Whereuser
和guest
是对应的模板。
<script type='text/x-handlebars' data-template-name='user'>
<h1>User layout</h1>
<div class='box user'>
{{outlet}}
</div>
</script>
<script type='text/x-handlebars' data-template-name='guest'>
<h1>Guest layout</h1>
<div class='box guest'>
{{outlet}}
</div>
</script>
这是一个有效的jsbin。
编辑:要不使用基于某些静态条件或通过钩子加载的应用程序路由,model
您可以覆盖renderTemplate
.ApplicationRoute
App.ApplicationRoute = Ember.Route.extend({
renderTemplate: function() {
var loggedIn = false;
if (loggedIn) {
this.render('user');
} else {
this.render('guest');
}
}
});