2012-12-06 35 views
5

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

我打算使用Javascript框架(如Meteor,Mojito和Express(Node.js))构建一个Web应用程序并在开发之前测试它们。

我使用流星版本0.5.2(6635ae1007)和 Chrome版本23.0.1271.95。

下面是测试的测试代码和步骤:

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

这种变化“结果”标签“的结果是OK”。

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

我想抱着标签“的结果是OK”,但它可以追溯到“结果”。 这意味着会话值是未定义的。

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> 

回答

8

UPDATE流星现在有一个Session.setDefault方法,做你期待什么。

原始回答以下

session对象在流星是从在其他框架中的概念session(轨道/ ASP.NET MVC/PHP)根本不同 - 流星它的主要功能是为作为reactive variable客户端的代码。

它是而不是旨在执行您期望的以上 - 只要您的链接触发,客户端上下文被擦除,并且任何客户端会话值都消失。流星应用程序不是为传统意义上的导航而设计的,所以这就是为什么这看起来很混乱。这是完全可以理解的:)

而不是在传统意义上接近导航,我建议你看看meteor-router,这有助于缓解传统和更meteoresque方法之间的过渡。

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

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

+0

谢谢你的帮助。现在我明白流星中的'会话'这个词了。我会检查流星路由器并放大你上面建议的智能包。 –