5

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

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

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

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

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

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

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

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

测试.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');
    }
  });
}

测试.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>
4

1 回答 1

8

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

原答案如下

Meteor 中的session对象与其他框架(Rails/ASP.NET MVC/PHP)中的概念根本不同session——它在 Meteor 中的主要功能是充当客户端代码的反应变量

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

我建议您不要使用传统意义上的导航,而是看一下meteor-router,它有助于简化传统方法和更流畅的方法之间的过渡。

如果您确实需要按照上面描述的方式保存数据,则需要查看用于在客户端本地保存数据的amplify 智能包

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

于 2012-12-07T01:58:54.320 回答