编码
我在新路由器上使用版本4fcdbf2560 。
在我的应用程序中,用户可以通过身份验证或不通过身份验证。根据身份验证状态,呈现的模板将不同。
我通过重新定义以下函数renderTemplate
来解决这个问题ApplicationRoute
:
App.ApplicationRoute = Ember.Route.extend({
renderTemplate: function() {
this.render(App.authenticated() ? 'authenticated' : 'unauthenticated');
}
});
我的路由器很简单:
App.Router.map(function(match) {
match('/').to('index');
match('/sign').to('sign', function(match) {
match('/in').to('signIn');
});
match('/dashboard').to('dashboard');
});
IndexRoute
只是在这里根据身份验证状态重定向用户:
App.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo(App.authenticated() ? 'dashboard' : 'signIn');
}
});
工作流程
- 用户导航到
/
- 输入
ApplicationRoute
了,因为用户没有被认证,所以unauthenticated
模板被渲染 IndexRoute
输入,因为用户未通过身份验证,所以重定向到signIn
- 模板被
signIn
渲染到其父模板 ->unauthenticated
模板 - 用户登录成功,
route.transitionTo('dashboard')
被调用 - 模板被
dashboard
渲染到其父模板 ->unauthenticated
模板
问题
- 我的实施有什么问题?
- 为什么渲染模板
renderTemplate
时不调用该函数?dashboard
- 如何强制应用程序重新呈现其模板?
编辑 2013-01-07
我根据埃文的回答修改了我的代码。
我的应用程序模板现在看起来像这样:
{{#if isAuthenticated}}
<h1>Authenticated</h1>
{{outlet}}
{{else}}
<h1>Unauthenticated</h1>
{{outlet}}
{{/if}}
当用户登陆应用程序页面时,由于他没有经过身份验证,因此呈现的是未经身份验证的块。一切都运行良好,除了没有任何东西渲染到{{outlet}}
标签中......
但是当我的应用程序模板看起来像这样(=没有条件标签)时:
<h1>Unauthenticated</h1>
{{outlet}}
...有用 !所以我想知道是否{{outlet}}
可以在条件标签之间插入标签。