0

私の現在の Ember プロジェクトでは、認証システムを導入しています。特定のページは、認証されたユーザーのみが表示できます。ユーザーが認証されているかどうかを確認し、ページへのアクセスを制御するのは簡単なので、問題はありません。

問題は、認証されたユーザーと認証されていないユーザーの両方が表示できる特定のページがあることです。認証されたユーザーには、認証されていないユーザーとは異なるナビゲーション (トップ バーとサイド バー) が表示されます (より多くのナビゲーション オプション、設定など)。ユーザーが認証されているかどうかに基づいて、使用されるレイアウトを変更したい。問題は、ビューに 1 つのレイアウトしか設定できないように見えることです。

一般的なコードは次のようなものです。

レイアウト:

<script type="text/x-handlebars" data-template-name="authenticated_layout">
  //authenticated layout mark up
  {{yield}}
</script>

<script type="text/x-handlebars" data-template-name="not_authenticated_layout">
  //not_authenticated layout mark up
  {{yield}}
</script>

記事テンプレート (記事は、認証済みユーザーまたは非認証ユーザーが表示できます):

<script type="text/x-handlebars" data-template-name="article">
  //article mark up
</script>

記事の表示:

App.ArticleView = Ember.View.extend({
  templateName: "article",
  layoutName: //want this to be based on authentication state
  //other view code
})

レイアウトごとに異なるビューを用意し、ユーザーが認証されているかどうかに基づいてビューを使用してテンプレートをレンダリングしました。私が目にする問題はArticlesView、レイアウトを設定するだけでなく、layoutNameプロパティだけが異なる 2 つの個別のビューを使用したくないということです。

アドバイスをいただければ幸いです。

4

1 に答える 1

2

あなたのlayoutNameの計算されたプロパティが機能すると思います。

擬似コード:

App.ArticleView = Ember.View.extend({
  templateName: "article",
  layoutName: function() {
    // you can use your own logic to know if the user is authenticated
    // but don't forget to add in the property(dependenKey), if needed
    return App.get('currentUser') ? 'authenticated_layout' : 'not_authenticated_layout';
  }.property('App.currentUser')
})
于 2013-11-14T17:05:40.813 に答える