コード
新しいルーターでバージョン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}}
ということで、コンディショナルタグの間にタグを挿入できるのかな。