mongodb - Meteor 如何从 mongo 数据库检索一系列问题并在应用程序中仅显示其中一个问题

标签 mongodb meteor

由于我是编程和 Meteor 的新手,我目前正在使用 Meteor.js 构建一个(简单的)测验应用程序。我按照《发现 meteor 指南》一书,将他们的示例显微镜项目重建为测验。 我目前正在努力从 mongo 数据库中检索一系列问题并在应用程序中仅显示其中一个问题。

我的集合中的数据目前如下所示:

Quizzes.insert(
    {"quiztitle": "Quiz One",
        "quizquestions": ["Q1.1", "Q1.2"]
    }),

我目前正在展示所有这些

<template name="quizPage">
        <h3>
            {{#each quizquestions}}
            {{> quizQuestion}}
            {{/each}}
        </h3>

<template name="quizQuestion">
<div class="quiz">
    <div class="quiz-content">
        {{this}}
    </div>
</div>

我已经尝试了几种解决方案,只显示第一个问题:

1.通过辅助函数用空格键替换数组编号。尽管助手工作了(它返回了一个特定的数字,例如 0),并且数组本身(括号之间是 0)。 Meteor 似乎不允许空格键插入数组括号中。

<template name="quizQuestion">
<div class="quiz">
    <div class="quiz-content">
        {{quizquestions.[{{questionnumber}}]}}
    </div>
</div>

2.a通过mongodb查询返回特定字段。例如

Return Quizzes.find( { quiztitle: 'Quiz One' }, { quizquestion: 1, _id:0, quiztitle: 0 });

不幸的是,这仅在服务器端允许。我还尝试将返回结果的数组保存到 lib 文件夹中的全局变量

questionArray = Quizzes.find( { quiztitle: 'Quiz One' }, { quizquestion: 1, _id:0, quiztitle: 0 } );

当我尝试对集合进行切片时也是这种情况,这是在另一篇文章中建议的

3.由于这似乎也不起作用,我尝试发布该集合的子集以用于特定测验。我这里遇到的问题是该集似乎已完整出版。我通过

在 frontpage.js 上发布该集合
Meteor.subscribe('quizzes');

我还尝试按照 http://docs.meteor.com/#meteor_subscribe 文档中的建议在自动运行中进行订阅

Deps.autorun(function () {
Meteor.subscribe("quizzes")});

问题:您能帮我找到一种仅返回问题数组并将其保存到全局变量或通过助手返回的方法吗?希望您能帮助我,非常感谢

meteor 初学者。

最佳答案

首先,您需要确保数据在客户端上可用。在 Chrome 中,打开 JavaScript 控制台 (cmd+option+j) 并粘贴 Quizzes.find().fetch(),您应该会看到您的对象。假设这是好的,继续...

要显示您的问题,您可以将特定问题返回到 {{#with}} block ,如下所示:

{{#with question}}
  <li>{{this}}</li>
{{/with}}

您的问题助手可能看起来像这样......

Template.TEMPLATE_NAME.helpers({
 question: function(){
  var currentQuestion = Session.get('currentQuestion') || 0;
  return Quizzes.findOne({}).quizquestions[currentQuestion]
 }
});

然后,您可以在每次回答或转到 Meteor 事件中的下一个问题时增加 Session 变量,如下所示:

Template.TEMP_NAME.events({   
 'click .next-question': function(){
   var num = Session.get('currentQuestion') + 1;
   Session.set('currentQuestion', num);
 }
});

这将导致帮助程序重新运行,并且您的新问题将被传递回 {{#with}} block 。

关于mongodb - Meteor 如何从 mongo 数据库检索一系列问题并在应用程序中仅显示其中一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24038944/

相关文章:

mongodb - Mongo 中的套接字超时异常

javascript - 简单模式在清理时删除对象值(DraftJS Raw Editor State 对象)

javascript - 如何删除 Meteor 集合中数组中的某个字段?

mongodb - E 查询 [thread1] 语法错误 : identifier starts immediately after numeric literal @(shell) in 'mongodb' ?

node.js - Mongodb 查询显示 "only this field"而不必一一拒绝每个字段?

javascript - mongodb insert 是否创建新模式

node.js - 类似于 Node 和 mongoose 的存储库模式

javascript - 将一天中的时间保存为 mongodb 中的数字,但以人类格式显示(使用 meteor 自动格式)

javascript - 在 Meteor.JS 中创建第一个用户时创建第二个用户

javascript - 如何在 Javascript 中单击 `<a>` 时更改 session 变量