8

因此,我一直在使用 Meteor 观察到的一个更令人困惑的方面是每次刷新都会清除会话。由于它不是一个持久存储,我应该把用户 ID 之类的东西放在哪里,或者人们在我的应用程序的状态机中的什么位置?

这些场景的模式是什么?

4

2 回答 2

8

实际上,您可以做的是创建 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);
  },
});

只需将所有 Session.set/get 调用替换为 SessionAmplify.set/get 调用即可。调用 set() 时,会调用父 Session 方法,以及 amplify.store()。当“子类”第一次创建时,它会在其键中加载 amplify 存储中的所有内容,以便可以使用 get() 立即检索它们。

您可以在此处测试排行榜示例的工作变体:https ://github.com/sebastienbarre/meteor-leaderboard

于 2013-02-02T05:56:15.277 回答
3

好吧,首先我会使用Auth 中内置的流星来存储用户 ID。我认为他们默认使用本地存储,但是AFAIK没有简单的方法可以解决这个问题。

但是,我想如果你想让东西在刷新后仍然存在,你应该将它存储在 mongo 中或使用 URL 来指示它们在“状态机”中的位置。您可以使用引导路由器(例如)pushState来更改 URL。

于 2012-07-29T07:29:58.743 回答