Meteor的临时的存储:Session
在开发的过程中有的时候我们只需要存储一些临时的变量,我们并不想使用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