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