Кнопка вверх и вниз
Я пытаюсь добиться кнопки "вверх" или "вниз", где пользователь может проголосовать только 1 раз и 1 раз. Если вы уже проголосовали за что-то, можно удалить это другим щелчком на кнопке upvote, но я не знаю, чего для этого не хватает. Мой код выглядит следующим образом. Я предполагаю, что я должен реализовать что-то с верным ложным утверждением, но я попробовал некоторые вещи, и ничего не получалось. Буду признателен за вашу помощь!
Template.postArgument.events({
'click':function() {
Session.set('selected_argument', this._id);
},
'click .yes':function() {
if(Meteor.user()) {
var postId = Arguments.findOne({_id:this._id})
console.log(postId);
if($.inArray(Meteor.userId(), postId.votedUp) !==-1) {
return "Voted";
} else {
var argumentId = Session.get('selected_argument');
Arguments.update(argumentId, {$inc: {'score': 1 }});
Arguments.update(argumentId, {$addToSet: {votedUp: Meteor.userId()}});
}
}
}});
2 ответа
Ваш общий подход верен, однако вам вообще не нужна переменная Session или даже обработчик первого клика. И вам вообще не нужно ничего возвращать из функции.
Template.postArgument.events({
'click .yes': function(){
if ( Meteor.user() ) {
var post = Arguments.findOne({_id:this._id});
if ( $.inArray(Meteor.userId(), post.votedUp) === -1 ) {
Arguments.update(this._id, {
$inc: { score: 1 },
$addToSet: { votedUp: Meteor.userId() }
});
} else {
Arguments.update(this._id, {
$inc: { score: -1 },
$pull: { votedUp: Meteor.userId() }
});
}
}
}
});
Вы можете начать с простого, проверив наличие пользователя в положительных и отрицательных голосах и, соответственно, увеличивать / уменьшать, а затем добавлять пользователя в наборы.
Meteor.methods({
'downvote post': function (postId) {
check(postId, String);
let post = Posts.findOne(postId);
Posts.update(postId, post.downvoters.indexOf(this.userId !== -1) ? {
$inc: { downvotes: -1 }, // remove this user's downvote.
$pull: { downvoters: this.userId } // remove this user from downvoters
} : {
$inc: { downvotes: 1 }, // add this user's downvote
$addToSet: { downvoters: this.userId } // add this user to downvoters.
});
}
});