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