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'});
    }
});

有许多简单的问题模板,如“question1”、“question2”等,只需单击下一步按钮即可显示。

当我们第一次点击链接“ http://localhost:4000/questionnaire ”时。“question1”模板默认显示。现在,当用户单击“下一步”按钮时,我们从服务器获取问题 ID 并显示该问题模板。因此,单击下一步按钮将使我们进入“ http://localhost:4000/question/2 ”,向我们显示 question2 模板。

到目前为止,一切都很顺利。

但是当我们直接在浏览器中输入“ http://localhost:4000/question/2 ”并重新加载时,问题就出现了。由于未加载其容器,该页面变为空白。

那么解决这个问题的最终方法是什么?我觉得如果我们在路由器中检测到“热推送代码”,那么我们可能也可以渲染容器模板,但是我们应该怎么做呢?而且我不确定哪个是最好的方法。

任何想法或帮助表示赞赏。

4

1 回答 1

0

action回调中,您从未告诉 Iron Routerquestionnaire用作布局模板。要解决此问题,您只需调用this.layout

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