Meteor的临时的存储:Session

jopen 9年前

在开发的过程中有的时候我们只需要存储一些临时的变量,我们并不想使用collection来存储,这个时候我们可以使用Session来存储,Session可以方便的存储一些状态,也可以在helpers中使用。

Session是变化的在客户端

我们在colletcions存储的数据,当数据在一个客户端更新的时候,更新的数据会立刻同步到服务器和其他的客户端,这样因为Mongo.Collection是可以是别处Meteor的更新数据,Session是一样的道理,但是他并不会同步到服务器端,和collections一样我们并不需要写额外的代码维护Session的状态,更新Session的内容只需要是用 Sessiong.set(key,value) ,当Session的值变化的时候,只需要在helpers里面调用 Session.get(key) 即可。

在html里面显示点击数

<head>      <title>meteor-session</title>  </head>    <body>    {{> counter_template}}  </body>    <template name="counter_template">      <button>点击</button>      <p>一共点击了 {{counter}} times.</p>  </template>

counter的值需要在helpers中返回

用Session存储点击的总数

if (Meteor.isClient) {      if (typeof( Session.get('counter')) == 'undefined') {          Session.setDefault('counter', 0);      }        Template.counter_template.helpers({          counter: function () {              return Session.get('counter');          }      });        Template.counter_template.events({          'click button': function () {              var counter = Session.get('counter')              counter++;              Session.set('counter', counter);          }      });  }

我们先检查Session里面的counter有没有值,没有的话就设置一个默认值为0,不然我们在做加法的时候会有NaN(Not a Number )的错误。

在helper里面给counter赋值为 Session.get('counter')

处理button的点击事件,每点击一次,计数器加1.

我们同样的打开连个浏览器做测试,点击一个浏览器的button的时候,其显示的计数器会加1,另一个浏览器没有任何变化。

刷新浏览器会导致计数器从0开始

Session并不会在server或者click中保存数据,这样就会出现一个问题当我刷新浏览器的时候,计数器会从0开始,怎么去解决这个问题呢?可以在在浏览器中保存计数器的值。

if (Meteor.isClient) {      if (typeof( Session.get('counter')) == 'undefined') {          Session.setDefault('counter', localStorage.getItem('counter'));      }        Template.counter_template.helpers({          counter: function () {              return Session.get('counter');          }      });        Template.counter_template.events({          'click button': function () {              var counter = Session.get('counter')              counter++;                localStorage.setItem('counter', counter)              Session.set('counter', counter);          }      });  }

localStorage是html5中的本地存储,在每次给Session的计数器赋值的同时,我们也给本地存储赋值,在每次初始化的时候我们给Session的默认值是本地存储的计数器的值,这样只要我们本地存储的计数器不被清除,刷新浏览器就不会导致计数器从0开始了。

localStorage中存储的counter的值:

项目地址: https://github.com/jjz/meteor/tree/master/meteor-session