2013-04-17 2 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 = верно. По какой-то причине мне неизвестно, что это не работает. Надеюсь, кто-то может мне помочь.

Update Это 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 (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

Я думаю, что узнал, в чем проблема, и, вероятно, это было моим пониманием Meteor. Я думаю, что когда реактивные данные используются в шаблоне, изменение в данных любого связанного шаблона вызывает повторный компромисс всех связанных данных в шаблоне. Данные сеанса устанавливаются и используются также в функции, связанной с шаблоном. Поэтому, как только был вызван повторный вызов, сеанс был снова установлен на false.

Как только я сломал свои шаблоны меньшими частями, каждая из которых состояла из отдельного шаблона, это поведение закончилось.

0

Это делает работу. Я добавил ваш код (удалил некоторые вещи, которые я не знаю, для чего это), в проект ванильного метеор, и он работает отлично.

Я создал проект, используя mrt create, и этот код устанавливает сеанс от истины до 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

Смежные вопросы