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

时间:2015-09-28 20:22:45

标签: meteor iron-router

我正在尝试在Meteor上创建一个测验应用,并且无法永远设置Iron Router。我会尝试给出一个视觉效果:

这是头版: Image 1

当用户点击上面显示的按钮时,我想要显示第一个问题,其内容是从MongoDB填充的。

Image 2

这就是我的路由器的样子(“问题”是问题模板的名称,如图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。

1 个答案:

答案 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>