Session 流星沃恩';无法保存会话值
我正在尝试使用Session.get()和Session.set()检查用户是否单击了按钮。在事件中,实现此代码是为了检查会话是否已设置Session 流星沃恩';无法保存会话值,session,meteor,Session,Meteor,我正在尝试使用Session.get()和Session.set()检查用户是否单击了按钮。在事件中,实现此代码是为了检查会话是否已设置 "click .alt": function(event,template){ if (Session.get("selected") === false){ var clicked = event.currentTarget; clicked.className += " chosen";
"click .alt": function(event,template){
if (Session.get("selected") === false){
var clicked = event.currentTarget;
clicked.className += " chosen";
var data = clicked.dataset;
console.log(data);
Session.set("selected", true);
if (data.corr == true){
console.log("Hi");
}
else{
console.log("Not Hi");
}
}
else{
console.log("session was set to true");
}
}
consol.log(数据)始终打印,但即使data.corr=true,“Hi”也会更新打印。不知什么原因,对我来说,这是行不通的。希望有人能帮助我
更新
这是行不通的:
if (Session.get("selected") == false){
Session.set("selected", true);
var clicked = event.currentTarget;
if (clicked.dataset.corr == true){
//Recording the time and calculating some points
time = new Date;
time = time.getTime();
time = 3000-Math.floor((time -Session.get("startedTime"))/10 );
gameCol.insert({team:Session.get("teamnr"), points: time});
console.log("Correct answer");
}
else{
//0 points for wrong answer
gameCol.insert({team:Session.get("teamnr"), points: 0});
console.log("Wrong answer");
}
}
else{
console.log("You have answered");
}
这项工作:
if (Session.get("selected") == false){
Session.set("selected", true);
var clicked = event.currentTarget;
if (clicked.dataset.corr == true){
//Recording the time and calculating some points
time = new Date;
time = time.getTime();
time = 3000-Math.floor((time -Session.get("startedTime"))/10 );
gameCol.insert({team:Session.get("teamnr"), points: time});
console.log("Correct answer");
}
else{
//0 points for wrong answer
//gameCol.insert({team:Session.get("teamnr"), points: 0});
console.log("Wrong answer");
}
}
else{
console.log("You have answered");
}
唯一的区别是在db中插入错误答案的行是remover。请参阅//gameCol.insert({team:Session.get(“teamnr”),points:0})行
Upadate 1.1
将if/else改为两个if反而有效
if (clicked.dataset.corr == true){
//Recording the time and calculating some points
time = new Date;
time = time.getTime();
time = 3000-Math.floor((time -Session.get("startedTime"))/10 );
gameCol.insert({team:Session.get("teamnr"), points: time});
console.log("Correct answer");
}
if(clicked.dataset.corr == false){
//0 points for wrong answer
gameCol.insert({team:Session.get("teamnr"), points: 0});
console.log("Wrong answer");
}
它确实有效。我在一个香草流星项目中添加了你的代码(删除了一些我不知道的东西),效果很好 我使用
mrt create
创建了一个项目,该代码在每次单击hello模板时将会话从true设置为false
if (Meteor.isClient) {
Meteor.startup(function() {
Session.set("selected", false);
});
Template.hello.greeting = function () {
return "Welcome to so-q.";
};
Template.hello.events({
"click": function(event,template){
if (Session.get("selected") === false){
console.log("session was set to false");
Session.set("selected", true);
}
else{
console.log("session was set to true");
Session.set("selected", false);
}
}
});
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
});
}
尝试
if(Session.equals('selected',false))
而不是if(Session.get('selected'))===false
。它应该会起作用。我想我发现了问题所在,可能是因为我对Meteor理解不够。我认为,当在模板中使用反应性数据时,任何绑定模板数据的更改都会触发模板中所有绑定数据的重新计算。会话数据也会被设置并用于一个bou函数中因此,一旦触发重新计算,会话就会再次设置为false
一旦我将模板分成更小的部分,每个部分都由一个单独的模板组成,这种行为就结束了。我猜你的大括号弄混了。示例中的缩进是错误的,这真的很奇怪。我删除了所有行,从头开始。在添加最后一行代码之前,一切都很好。如果我注释掉lin一切正常。更新了原始帖子的更多细节