我正在尝试从一系列问题中发布随机问题。但是我得到一个错误说明:错误:发布功能只能返回Cursor或Cursors数组。如何在下面更改我的出版物,以便输出一个随机问题?
Publications.js
Meteor.publish('randomQuestions', function(){
var randomInRange = function(min, max) {
var random = Math.floor(Math.random() * (max - min + 1)) + min;
return random;
};
var q = Questions.find().fetch();
var count = q.length;
var i = randomInRange(0, count);
return q[i]
});
Router.js
this.route('gamePage', {
path: '/games',
waitOn: function() {
return [
Meteor.subscribe('randomQuestions'),
];
}
});
这是客户端的一个帮助,以获取随机问题
Template.gamePage.helpers({
displayRandomQuestion:
function() {
return Questions.find({});
}
});
最后这里是使用帮助函数的html / css
<div class="questions">
{{#each displayRandomQuestion}}
{{> questionItem}}
{{/each}}
</div>
答案 0 :(得分:3)
您可以为单个随机问题返回光标。
Meteor.publish('randomQuestion', function (seed) {
var q = _.sample(Questions.find().fetch());
return Questions.find({_id: q && q._id});
});
您还应该使用随机种子进行订阅,以确保客户不共享同一个出版物。以下示例要求您meteor add random
。
this.route('gamePage', {
path: '/games',
waitOn: function() {
return Meteor.subscribe('randomQuestion', Random.id());
}
});
然后,您可以在帮助程序中返回该问题
Template.gamePage.question = function() {
return Questions.findOne();
};
并将该数据作为模板的上下文提供。
<div class="question">
{{> questionItem question}}
</div>