由于我是编程和Meteor的新手,我目前正在使用Meteor.js构建一个(简单的)Quizz应用程序。我按照发现流星指南书并将他们的示例显微镜项目重建为测验。 我目前正在努力从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.通过带有Spacebars的辅助函数替换数组编号。虽然帮助程序工作(它返回一个特定的数字,例如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")});
问题:你能帮我找到一种方法只返回问题数组,并将其保存到全局变量或通过帮助器返回。我希望你能帮助我,非常感谢,
流星初学者。
答案 0 :(得分:3)
首先,您需要确保客户端上的数据可用。在Chrome中,打开你的javascript控制台(cmd +选项+ j)并粘贴Quizzes.find().fetch()
,你应该看到你的对象。假设这很好,继续......
要显示您的问题,您可以将特定问题返回到{{#with}}
块,如下所示:
{{#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}}
块。
答案 1 :(得分:0)
在quizPage
模板中,添加一个帮助程序,找到一个问题:
Template.quizPage.firstQuestion = function() {
return this.quizquestions[0];
}
然后使用它:
<template name="quizPage">
<h3>
<!-- #with is like #each, but for a single item -->
{{#with firstQuestion}}
{{> quizQuestion}}
{{/with}}
</h3>
</template>