我遇到的问题是,如果将网页移动到其他网页,Meteor无法保存会话的值。我是Meteor的新手,也许我在误用。 如何处理页面中的会话值?即使页面移动到其他页面或重新加载浏览器,我也希望保持会话的值。
我计划使用Javascript框架(如Meteor,Mojito和Express(Node.js))构建Web应用程序,并在开发之前对其进行测试。
我正在使用Meteor版本0.5.2(6635ae1007)和 Chrome版本23.0.1271.95。
以下是测试代码和测试步骤:
(1)点击“TEST”按钮:
这会将“结果为”标签更改为“结果正常”。
(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>
答案 0 :(得分:8)
更新 Meteor现在有一个Session.setDefault方法,可以完全满足您的期望。
下面的原始答案
meteor中的session
对象与其他框架(Rails / ASP.NET MVC / PHP)中的session
概念根本不同 - 它在Meteor中的主要功能是作为客户端代码的reactive variable。
设计用于执行您期望的操作 - 只要您的链接触发,客户端上下文被擦除,并且任何客户端会话值都消失了。 Meteor应用程序不是为传统意义上的导航设计的,所以这就是为什么这看起来很混乱。这完全可以理解:)
我建议您先看看meteor-router,而不是接近传统意义上的导航,这有助于简化传统方法和更多meteoresque方法之间的转换。
如果您确实需要按照上述描述的方式保留数据,那么您需要查看amplify smart package以便在本地保存客户端数据。
提示:当您在the docs中了解Meteor时,请密切关注每个细分受众群右上角的客户端/服务器/指定。