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