Meteor的臨時的存儲:Session

jopen 8年前發布 | 7K 次閱讀 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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!