5

私には2つのモデルがAdminあり、User 私のアプリケーションテンプレートは次のとおりです

//application.hbs
{{outlet}}
{{header-nav}}

{{header-nav}}カスタマイズ可能にするために(可能であれば)やりたいことは 次のとおりadminです。動的にレンダリングするものを構築するにはどうすればよいですか?{{admin-header}}user{{user-header}}application.hbs

4

2 に答える 2

3

isAdminApplication Controller で計算されたプロパティを定義できます。

// application controller 
isAdmin: Ember.computed(function() {
  // your logic here
})

// application template
{{#if isAdmin}}
  {{admin-header}}
{{else}}
  {{user-admin}}
{{/if}}

または、プロパティを持つheader-navコンポーネントとしてラップすることもできます。isAdmin

// application template
{{header-nav isAdmin=isAdmin}}

更新 (@Grimmy の ember-simple-auth で詳細)

1) に注入currentUserしますsession(例: https://stackoverflow.com/a/30894082/4950029 )

2)フックで解決currentUserし、コントローラーのプロパティを設定します。beforeModelcurrentUser

//route
beforeModel: function() {
  var self = this;
  this.session.get('currentUser').then(function(user) {
    self.controllerFor( self.routeName ).set('currentUser', user);
  },function() {
    self.controllerFor( self.routeName ).set('currentUser', null);
  });
}

//controller
isAdmin: Ember.computed('currentUser.role', function() {
  return (this.get('currentUser.role') === 'admin');
}),

//template
{{#if isAdmin}}
  {{admin-header}}
{{else}}
  {{user-admin}}
{{/if}}

または上で答えたように

//controller
roleBasedComponentName: Ember.computed('currentUser.role', function() {
  return ((this.get('currentUser.role') === 'admin') ? 'admin-header' : 'user-header');
})

//template
{{component roleBasedComponentName user=currentUser}}
于 2015-06-16T08:53:18.560 に答える
3

ヘルパーを使用することもでき{{component}}ますが、最初にコンポーネント名を決定する必要があるため、コントローラーで次のようにします。

nameForComponent: Ember.computed('user.isAdmin', function()  {
// if admin return admin-header else user-header
})

次に、テンプレートで次のようにします。

{{component nameForComponent}} 

このようなユースケースのために、少し前に設計および導入されました。

さらに派手にすることもできます:

{{component (if user.isAdmin 'admin-header' 'user-header') }} 
于 2015-06-16T13:08:21.633 に答える