因此,我一直在观察Meteor的一个比较令人困惑的方面是每次刷新都会清除Sessions。既然它不是持久存储,我会在哪里放置像userid这样的东西,或者人们在我的应用程序的状态机中?
这些情景有哪些模式?
答案 0 :(得分: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()时,将调用父Session方法,以及amplify.store()。当首次创建“子类”时,它会加载放在其键中的放大商店中的所有内容,以便可以使用get()立即检索它们。
您可以在此处测试排行榜示例的工作变体:https://github.com/sebastienbarre/meteor-leaderboard
答案 1 :(得分:3)
好吧,首先我会使用meteors built in Auth来存储userID。我认为他们默认使用本地存储,但AFAIK并没有简单的方法可以解决这个问题。
但是,我想如果你想让东西在刷新时存活下来,你应该将它存储在mongo中,或者使用URL来指示它们在状态机中的位置'。您可以使用引导路由器(例如)使用pushState
来更改URL。