让 Iron Router 在我的项目上工作的问题

Problems getting Iron Router to work on my project

我正在尝试在 Meteor 上创建一个测验应用程序,但一直无法设置 Iron Router。我会尝试给出视觉效果:

这是首页: Image 1

当用户点击上面显示的按钮时,我希望显示第一个问题,其内容来自MongoDB。

Image 2

这是我的路由器的样子("question" 是问题模板的名称,如图 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 上单击 "Next Question" 进入第二个问题时,它不起作用。我不知道如何使这个过程动态化。

在我看来,现在我必须为每个问题创建一条新路线,这很快就会看起来非常丑陋。

在这种情况下有什么方法可以帮助实施 Iron Router?我阅读了 Discover Meteor 并认为我完全理解 Iron Router 的工作原理,但我越是尝试解决这个问题,我就越感到困惑。

编辑:

为了解决我的困境,我根据 Michel Floyd 的建议简单地创建了一个辅助函数,我可以将其放在主模板中的 /quiz/ 后面,引导我进行测验。

所以助手最终看起来像这样:

Template.main.helpers({
  nextQuestion: function(){
    queue = Quiz.find().fetch();
    return queue[0]._id;
  }
});

然后像这样附加到URL:

<a class="btn btn-primary btn-large" href="/quiz/{{nextQuestion}}">Start</a>

基本上只是通过 find().fetch() 使集合成为数组,从而吐出数组中第一项的第一个 _id。稍后可能会随机化 _id。

您需要一种方法让每个模板知道下一个问题是什么。例如,您可以向 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>