在开发的过程中有的时候我们只需要存储一些临时的变量,我们并不想使用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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。