我一直试图弄清楚如何让每个循环在Meteor中工作几天。我有一个QuestionList
集合,其中包含两个数组(usersTrue
usersFalse
),供猜测问题的人使用。当我回答问题时,我想通过两个数组并更改用户分数。我认为我非常接近,但我错误地称这两个系列中的一个。
链接到问题集的两个集合QuestionList
和连接到UserList
的{{1}}
我有出版物
Meteor.users
当我回答问题时,我有管理员方面的模板。它使用一些参数调用Meteor.publish('activeQuestions', function(){
return QuestionList.find({ });
});
Meteor.publish('userNotAnswered', function(){
var currentUserId = this.userId;
return QuestionList.find({active: true, usersTrue: {$nin: [currentUser]},
usersFalse: {$nin: [currentUser]}});
});
Meteor.publish('userAnswer', function(){
var currentUserId = this.userId;
return UserList.find({_id: currentUserId});
});
方法。
modifyQuestionStatus
最后我有方法
Template.activeQuestionList.events({
'click [data-action=questionTrue]': function() {
// Select the id of the yes button that is clicked
var questionId = this._id;
Session.set('answered', questionId);
// Get the session
var answered = Session.get('answered');
// Update the database without losing any data
Meteor.call('modifyQuestionStatus', answered, true);
},
'click [data-action=questionTrue]': function() {
// Select the id of the yes button that is clicked
var questionId = this._id;
Session.set('answered', questionId);
// Get the session
var answered = Session.get('answered');
// Update the database without losing any data
Meteor.call('modifyQuestionStatus', answered, false);
}
});
secret是存储硬币的数组。
我知道代码并不完美,但我希望在清理之前让代码正常工作。我想我提供了足够的信息。我是编程新手,所以如果我错过任何有助于回答问题的内容,请告诉我。
答案 0 :(得分:0)
base是你可能需要fetch()的游标:
var base = QuestionList.find({_id: questionId}).fetch();
甚至findOne():
var base = QuestionList.findOne({_id: questionId});
答案 1 :(得分:0)
'modifyQuestionStatus' : function(questionId, answer){
QuestionList.update(questionId, {$set: {active: false, answer: answer}});
var usersTrue = _.pluck( QuestionList.find({"_id": questionId}).fetch(), 'usersTrue' );
var usersFalse = _.pluck( QuestionList.find({"_id": questionId}).fetch(), 'usersFalse' );
if (answer === true) {
usersTrue.forEach(function (user) {
console.log("These users get 100 coins " + user);
Session.set('userData', user);
var userData = Session.get('userData');
Meteor.users.update(userData, {$inc: { "coins.$.coins": 100}} );
});
usersFalse.forEach(function (user) {
console.log("These users lose 100 coins " + user);
Meteor.users.update({ _id: user}, {$inc: { "coins.$.coins": -100}} );
});
} else {
usersFalse.forEach(function (user) {
console.log("These users get 100 coins " + user);
UserList.update({ _id: user}, {$inc: { "coins.coins": 100}} );
});
usersTrue.forEach(function (user) {
console.log("These users lose 100 coins " + user);
UserList.update({ _id: user}, {$inc: { "coins.coins": -100}} );
});
}
},
使用fetch并将usersTrue和usersFalse声明为变量。代码有效但不更新硬币文档。