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

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

localStorage中存储的counter的值:
图片描述

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


姜家志
2.3k 声望148 粉丝

尽力了!才有资格说运气不好。