2016-08-20 9 views
0

私は「ブログ」アプリを作成しようとした際、次のような課題に直面しています。ルートまたはハンドルバーの状態に基づいてコンポーネントを変更する方法

ヘッダーをレンダリングするグローバルヘッダーコンポーネントがあります。このヘッダーは、単一のブログ投稿を表示しているときにヘッダーシングルを表示する場合を除いて、すべてのルートで同じままです。

これは私が達成しようとしているハンドルバーのロジックである、それは理にかなっている場合:ここで

{{#if single}} 
    {{header-single}} 
{{else}} 
    {{header-global}} 
{{/if}} 

はここに私のroute.js

import Ember from 'ember'; 
import config from './config/environment'; 

const Router = Ember.Router.extend({ 
    location: config.locationType 

}); 

Router.map(function() { 
    this.route('posts', function() { 
    this.route('user', { path: '/user/:id' }); 
    this.route('single', { path: '/:id', }); 
    }); 

    this.route('page', { path: '/:slug' }); 
}); 




export default Router; 

である私がする必要がどこapplication.hbsですルートに基づいてヘッダーを変更する:

<!-- Page Header --> 
{{#if single}} 
    {{header-single}} 
{{else}} 
    {{header-global}} 
{{/if}} 
<!-- Main Content --> 

{{outlet}} 

<!-- Footer --> 
+0

は、あなたがハンドルロジックを持つ任意の問題に直面しますapplication.hbs? – kumkanillam

+0

ええ、{{#if single}}は常にfalseと評価されるためです。私は私のルーティングで質問を更新します – odinp123

+1

'single'プロパティはどこに設定していますか? – kumkanillam

答えて

1

あなたの要件は、さまざまな方法で解決することができます。場合。

以下

は一つのアプローチ、application.jsコントローラで

である、あなたはcurrentRouteName性質上、あなたのロジックを記述することができますapplication.hbsに依存して計算されたプロパティsingleを定義することができます。

コントローラ/ application.js

single:Ember.computed('currentRouteName',function(){  
    if(this.get('currentRouteName') === 'posts.single'){ 
     return true; 
    } 
    return false; 
    }), 

テンプレート/

{{#if single}} 
    {{header-single}} 
{{else}} 
    {{header-global}} 
{{/if}} 
+0

あなたは正しいです、それは本当にユースケースに依存します。私は自分のapplication.hbsで質問を更新します。 – odinp123

+0

が私の答えを更新しました。あなたが[ember-twiddle](https://ember-twiddle.com)を提供できるなら、あなたのために修正することができます。 – kumkanillam

+0

私はそれを正しくしたことを願っています:) https://ember-twiddle.com/7daacf75ae3eaa7197e39577fe5c7af3?openFiles=serializers.post.js%2C – odinp123

関連する問題