8

因此,我一直在用流星觀察到的一個更令人困惑的方面是每次刷新都會清除會話。由於它不是一個持久存儲,我會在哪裏放置像userid這樣的東西,或者哪裏的人在我的應用程序的狀態機中?流星中的持久會話

這些場景的模式是什麼?

回答

3

那麼,一開始我會用流星built in Auth來存儲用戶ID。他們在我認爲默認情況下使用本地存儲,但AFAIK有沒有簡單的方法來掛鉤。

但是,我會想如果你希望在刷新過程中存活,你應該將它存儲在mongo中,或者使用URL來指示它們在'狀態機'中的位置。您可以使用引導路由器(例如)使用pushState來更改URL。

9

實際上,你可以做的是創建一個Session的「子類」,當set()被調用時,它將值存儲在Amplify的本地存儲中。你會自動繼承Session的所有反應性屬性。這裏是代碼,它爲我工作:

SessionAmplify = _.extend({}, Session, { 
    keys: _.object(_.map(amplify.store(), function(value, key) { 
    return [key, JSON.stringify(value)] 
    })), 
    set: function (key, value) { 
    Session.set.apply(this, arguments); 
    amplify.store(key, value); 
    }, 
}); 

只需用SessionAmplify.set/get調用替換所有Session.set/get調用。當調用set()時,調用父級會話方法以及amplify.store()。當第一次創建「子類」時,它會將放大存儲區中的所有內容加載到其鍵中,以便可以使用get()立即檢索它們。

您可以在此處測試排行榜示例的工作變體:https://github.com/sebastienbarre/meteor-leaderboard

+1

不錯。我發現了這個東西,但我完全會用這個想法。謝謝,塞巴斯蒂安! – 2013-10-24 18:51:45

+0

+1,這個作品非常漂亮 – danii 2013-12-11 20:14:55