Session 流星沃恩';无法保存会话值

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";

我正在尝试使用Session.get()和Session.set()检查用户是否单击了按钮。在事件中,实现此代码是为了检查会话是否已设置

"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一切正常。更新了原始帖子的更多细节