我有一系列能够向上或向下投票的网站。在集合中是一个空数组,用于通过将userId插入数组来跟踪已经投票的用户
问题:我可以插入userID甚至用户名,但它只会将id / name变量存储为该时间的字符串。如果我再次点击再次投票,则前一个元素将变为整数。似乎只有当我把""在他们旁边。但是我使用变量来获取用户ID /名称。当我把""在它周围,我真的得到了#34; theVariable",没有帮助。我已经尝试过所有我能想到的......任何帮助都会受到赞赏。
模式
{
url:url,
title:title,
description:description,
createdOn:new Date(),
createdBy:Meteor.user()._id,
votes: 0,
upVotes: 0,
downVotes: 0,
voted: []
}
代码
"click .js-downvote":function(event){
// access the id for the website in the database
var website_id = this._id;
console.log("Down voting website with id "+website_id);
//add a down vote
var user = Meteor.user()._id;
if (user){
var theUser = this.voted.push(user);
Websites.update({_id:website_id}, {$inc: {votes: 1}}, {$inc:{downVotes: -1 }}, {$push:{voted: theUser}});
}
console.log(this.voted);
return false;// prevent the button from reloading the page
}
每次我clcik时,我都会在控制台上输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "mWe4r2JcfhRAvn97y"]
首先我得到字符串,然后对于每次后续点击,字符串向下移动,第一个元素变为数字。我需要每次都存储用户ID。所以我可以检查它是否允许投票。
答案 0 :(得分:0)
解决方案:
似乎字符串只有在我放""在他们旁边。但 我使用变量来获取用户ID /名称。当我把""周围 我确实得到了#34; theVariable",没有帮助。
如果您使用的是ES6或更高版本的JS,则可以使用字符串插值。您必须使用反向标记(`)而不是单引号(')。
示例:
var name = "Rose";
console.log(`"My name is ${name}"`);
输出:
"My name is Rose"
在你的代码中执行以下操作:
Websites.update({_id:website_id}, {$push:{voted: `"${theUser}"`}});
它被内插到:
Websites.update({_id:website_id}, {$push:{voted: "userid within quotes"}});
您将获得报价。使用此方法替换您的查询