我正在尝试在Meteor上创建一个测验应用,并且无法永远设置Iron Router。我会尝试给出一个视觉效果:
这是头版: Image 1
当用户点击上面显示的按钮时,我想要显示第一个问题,其内容是从MongoDB填充的。
这就是我的路由器的样子(“问题”是问题模板的名称,如图2所示):
Router.route("/quiz/:_id", {
name: "question",
data: function(){
return Quiz.findOne(this.params._id);}
});
现在,为了让我从图像1到图像2,我必须在html文件中使用mongo对象 _id 。
<template name="main">
<div class="jumbotron">
<h2>
Welcome to Simple Meteor Quiz app!
</h2>
<p>
To try it out, simply click "start" below!
</p>
<p>
<a class="btn btn-primary btn-large" href="/quiz/cieLkdzvGZPwrnZYE">Start</a>
</p>
</div>
</template>
当我点击图像2上的“下一个问题”进入第二个问题时,它不起作用。我不知道如何使这个过程充满活力。
它现在看起来的方式是我必须为每个问题创建一条新路线,这看起来很快就会很难看。
在这种情况下,有什么方法可以帮助实现Iron Router?我读了探索流星,并认为我完全理解铁路由器是如何工作的,但我试图解决这个问题越多,我就越困惑。
修改
为了解决我的困境,我简单地创建了一个帮助函数,我可以在主模板的/quiz/
后面根据Michel Floyd的建议引导我进入测验问题。
所以帮手最终看起来像这样:
Template.main.helpers({
nextQuestion: function(){
queue = Quiz.find().fetch();
return queue[0]._id;
}
});
然后附加到这样的网址:
<a class="btn btn-primary btn-large" href="/quiz/{{nextQuestion}}">Start</a>
基本上只是通过find()。fetch()使集合成为数组,从而吐出数组中第一项的第一个_id。可能会在以后随机化_id。
答案 0 :(得分:3)
您需要一种方法让每个模板知道下一个问题是什么。例如,您可以向Quiz对象添加nextQuestionId
键。然后你的模板可以是:
<template name="main">
<div class="jumbotron">
<h2>
Welcome to Simple Meteor Quiz app!
</h2>
<p>
To try it out, simply click "start" below!
</p>
<p>
<a class="btn btn-primary btn-large" href="/quiz/{{nextQuestionId}}">
Start
</a>
</p>
</div>
</template>