2013-04-17 56 views
0

我试图使用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 =真。出于某种原因,对我而言,这是行不通的。希望有人能帮助我。

更新 这wount工作:

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

唯一的区别是,在数据库中插入一个错误的答案该行是卸妆。请参阅//gameCol.insert({team:Session.get("teamnr“),points:0});

Upadate 1.1 更改的if/else两个,如果不是工作

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"); 
     } 
+0

我的猜测是你有你的大括号混合起来。示例中的缩进是错误的 – Swadq

回答

0

我想我发现了什么问题,可能是我mot理解流星足够。我认为,当在模板中使用反应数据时,任何绑定模板数据的更改都会触发模板中所有绑定数据的重新计算。会话数据被设置并用于在模板中绑定的函数中。因此,一旦重新计算被触发,会话又被设置为假。

一旦我将我的模板打碎成小块,每个小块都包含一个单独的模板,则此行为结束。

0

它的工作。我添加了你的代码(删除了一些我不知道它是干什么的)到一个香草流星项目中,它工作得很好。

我使用mrt create创建了一个项目,并且此代码在每次单击hello-template时将会话从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 
}); 
} 
+0

这真的很奇怪。我删除了所有行,并从头开始。一切工作正常,直到我加入了我的最后一行代码。如果我评论这条线,一切都按预期工作。更新的原始帖子更详细 – user1262878

0

尝试if (Session.equals('selected', false))而不是if (Session.get('selected') === false。它应该工作。

+0

两者都应该工作。 –

+0

尝试都没有按预期工作。 – user1262878