由于我是编程和 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/