【问题标题】:Meteor couldn't hold a session's value among pagesMeteor 无法在页面之间保存会话的值
【发布时间】:2013-06-08 01:28:07
【问题描述】:

如果将网页移动到其他网页,我遇到了 Meteor 无法保存会话值的问题。我是 Meteor 的新手,也许我在滥用。 如何处理页面之间的会话值?即使页面移动到其他页面或重新加载浏览器,我也想保留会话的值。

我计划使用 Javascript 框架(例如 Meteor、Mojito 和 Express (Node.js))构建一个 Web 应用程序,并在开发之前对其进行测试。

我正在使用 Meteor 版本 0.5.2 (6635ae1007) 和 Chrome 版本 23.0.1271.95。

这是一个测试代码和测试步骤:

(1) 点击“测试”按钮:

这会将“结果为”标签更改为“结果正常”。

(2) 点击“返回首页”链接或重新加载浏览器:

我想保留标签“结果正常”,但它又回到“结果是”。 这意味着会话值未定义。

test.js

if (Meteor.isClient) {
  Template.test.result = function() {
    var result = Session.get('TEST');
    console.log('Result: %s', result);
    return result;
  }

  Template.test.events({
    'click' : function() {
        Session.set('TEST', 'OK');
    }
  });
}

test.html

<head>
  <title>sample-session</title>
</head>

<body>
  <h1>Session Test</h1>
  <a href="./">Back to Top page<a/><br/>
  {{> test}}
</body>

<template name="test">
  <input type="button" value="TEST"></input><br/>
  Result is {{result}}.
</template>

【问题讨论】:

    标签: meteor


    【解决方案1】:

    更新 Meteor 现在有一个 Session.setDefault 方法,它完全符合您的预期。

    原始答案如下

    meteor 中的session 对象与其他框架(Rails/ASP.NET MVC/PHP)中的session 概念根本不同——它在 Meteor 中的主要功能是作为客户端代码的reactive variable

    不是旨在执行您在上面所期望的 - 一旦您的链接触发,客户端上下文就会被擦除,并且所有客户端会话值都消失了。 Meteor 应用程序并不是为传统意义上的导航而设计的,所以这就是为什么这看起来如此令人困惑的原因。这完全可以理解:)

    我建议你看看meteor-router,而不是传统意义上的导航,这有助于轻松地在传统方式和更流畅的方式之间过渡。

    如果您确实需要按照上面描述的方式持久化数据,则需要查看 amplify smart package 以在本地客户端上持久化数据。

    提示:当您在the docs 中了解 Meteor 时,请密切注意每个段右上角的客户端/服务器/任何位置的指定。

    【讨论】:

    • 感谢您的帮助。现在我理解了 Meteor 中的“会话”这个词。我会检查meteor-router并放大你上面建议的智能包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多