无法让Meteor中的每个人都能工作

时间:2015-01-16 09:02:35

标签: javascript meteor meteor-helper

我一直试图弄清楚如何让每个循环在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是存储硬币的数组。

我知道代码并不完美,但我希望在清理之前让代码正常工作。我想我提供了足够的信息。我是编程新手,所以如果我错过任何有助于回答问题的内容,请告诉我。

2 个答案:

答案 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声明为变量。代码有效但不更新硬币文档。