0

次のボタンをクリックすると質問が次々と表示される「アンケート」というコンテナテンプレートがあります。次のボタンをクリックすると、バックグラウンドで次の質問へのルートを提供するロジックがいくつかあります。そして、アンケート内の質問テンプレートを変更します。

<template name="questionnaire">
    <h1>Snapwiz questionnaire</h1>
    <h3>Question</h3>
    {{> yield region="singleQuestion"}}
    <button class="next">Next</button>
</template>

Template.questionnaire.events({
    'click .next':function(event,template){ 
           Meteor.call('nextQuestion',Router.current().params._id,function(err,res){
            if(res){
                Router.go('/question/'+res);
            }
        });
    }
});

Router.route('questionnaire',{
    yieldTemplates:{
        'question1':{to:'singleQuestion'}
    }
});

Router.route('question',{
    path:'question/:_id',
    action:function(){
        this.render('question'+this.params._id,{to:'singleQuestion'});
    }
});

次のボタンをクリックするだけで表示される「質問1」「質問2」などの簡単な質問テンプレートがたくさんあります。

最初にリンク「http://localhost:4000/questionnaire」にアクセスしたとき。デフォルトでは「question1」テンプレートが表示されます。ユーザーが「次へ」ボタンをクリックすると、サーバーから質問 ID が取得され、その質問テンプレートが表示されます。したがって、次のボタンをクリックすると、「http://localhost:4000/question/2」に移動し、 question2 テンプレートが表示されます。

これまでのところ、すべてがスムーズに機能しています。

しかし、「 http://localhost:4000/question/2」をブラウザに直接入力してリロードすると問題が発生します。コンテナがロードされていないため、ページは空白になります。

では、これに対する最終的な修正は何でしょうか? ルーターで「ホット プッシュ コード」を検出した場合、コンテナー テンプレートもレンダリングできると思いますが、これはどのように行うべきでしょうか? そして、どちらが最善のアプローチであるかはわかりません。

任意の考えや助けをいただければ幸いです。

4

1 に答える 1

0

コールバック内では、actionIron Router にquestionnaireレイアウト テンプレートとして使用するように指示していません。これを修正するには、次のように呼び出すだけですthis.layout

action: function () {
    this.layout('questionnaire');
    this.render('question' + this.params._id, {to: 'singleQuestion'});
}
于 2015-05-29T13:36:28.390 に答える