2016-05-18 12 views
0

ユーザーが登録されているかどうかに応じて、流星のアプリケーションに読み込む最初のページを設定しようとしています。 (ユーザーがログインしていない場合はxテンプレートをロードし、そうでない場合はsignInテンプレートをロードします)。Meteorのスタートアップページ

サインインテンプレートには、他のテンプレート(回復パスワードとサインアップ)がリンクされていないという問題があります(ページは常に「if currentUser」句によってサインインテンプレートに保持されます)。 )。おそらく私は間違った方法でそれに近づいています。

ロードする最初のページの設定方法はありますか?これは私のhtmlです:

<template name="main"> 
    {{#if currentUser}} 
    {{> header}} 
    {{> yield}} 
    {{else}} 
    {{> entrySignUp}} 
    {{/if}} 
</template> 

<template name="home"> 
    {{#if eventJoined}} 
    {{> board}} 
    {{else}} 
    {{> findEvent}} 
    {{/if}} 
</template> 

これらは私のルートです。 Myapp.js:

Router.route ('/home') 
Router.route('/', { template: 'home'}); 
Router.configure({layoutTemplate: 'main'}); 
Router.route('/findEvent'); 
Router.route('/board'); 
+0

ルートコードとすべての関連コードを追加できますか?問題はおそらくあなたの{{>利回り}}がcurrentUserだけであることでしょう。 Iron:残りのルート/テンプレートをレンダリングするにはルータが{{> yield}}する必要があります。 – Luna

+0

私はすでに質問を編集しました。 – Ruben

答えて

1

あなたはこのようにどのテンプレートレンダリングしたルートを指定する必要があります。

Router.configure({ 
    layoutTemplate:'mainTemplateName', 
    loadingTemplate: 'loadingTempName' 
}); 

Router.route('/', function() { 
    this.render('home'); 
}); 

Router.route('/another-route', function() { 
    this.render('anotherTemplate'); 
}); 

あなたの中にそれを持っている場合、それらのテンプレートのいずれかが、{{>利回り}}にレンダリングしそうになりますif currentUser、非ユーザ向けにレンダリングすることはできません。

EDIT

あなたのメイン/レイアウトテンプレートは、ユーザーがサイトに入ったとき、彼らは一度だけレンダリングナビゲーションバー、フッター、サイドバーなどのようなレイアウトの主な要素が含まれている必要があります。 {{>収率}}ユーザーが他のルートになるとテンプレートの残りの部分は変更/再レンダリングメインテンプレートに

EDIT-2 レイアウト/メインテンプレートの要素をすることなく、描画する場所を指定します、あなたはこれを持っている:

{{#if currentUser}} 
    {{> header}} 
    {{> yield}} 
{{else}} 
    {{> entrySignUp}} 
{{/if}} 

鉄のため{{> yield}}を意味します:ルータは、ユーザーにのみログに記録されたためです。ユーザーが他のルートに行くことができるようにすべての訪問者のために収穫が必要/鉄のルータはあなたの質問に書いたようにパスワード/サインアップを回復するような他のテンプレートをレンダリングすることができます。したがって、を{{#if currentUser}}の外側に含めて、それが必要な場合はいつでも使用してください。たとえば、次のように

メインテンプレート:どんなにこの場合

Router.route('/', function() { 
    if(Meteor.user()){ 
     this.render('someTemplate') //for logged in user in route '/' 
    } else { 
     this.render('entrySignUp'); 
    } 
}); 

Router.route('/findEvent'); 
Router.route('/board'); 

、:あなたはまた、次のようにレンダリングするか決定するためにあなたのrouter.jsにチェックを行うことができます

<template name="layout"> 
    {{> navigation}} 

    <div class="content-area"> 
     {{> yield}} 
    </div> 
</template> 

<template name="navigation"> 
    This will always be visible in every route according to the template above. 
</template> 

実際にレンダリングする場所を持つためにログインしたユーザーとログアウトしたユーザーの両方が利用できるかどうかにかかわらず、{{> yield}}が利用可能かどうかによらず、上記のテンプレートは常に{{> yield}}にレンダリングされますあなたの場合は、none-users用のテンプレート。

+0

実際に私は私のルート名と私のテンプレート名(ルート/テンプレートは同じ名前です)との対応を持っています。そのため、Iron Routerはレンダリングの句で特定する必要はありません。HTMLで変更を加えたり、 "#if currentUser"を削除する必要がある場合、私はあなたの答えでは分かりません。 – Ruben

+0

{{> yield}}はiron:routerがテンプレートをレンダリングする場所です。あなたは鉄のルータにcurrentUserのためにそれをレンダリングするように指示します。それは間違っている。収入は、現在のユーザーと非ユーザーの両方である必要があります。その場所の鉄:ルータ誰ものための任意のテンプレートをレンダリングので、はい、あなたのhtmlを変更する必要があります。 – Luna

+0

@Rubenは私の答えに例を挙げさせてください... – Luna

関連する問題