2013-10-06 52 views
1

我正在那里有没有用户帐户的服务,我想我在访问什么网页,来限制。流星:不可靠的会话变量?

所以每个页面都是一个“盒子”,并且每个“盒子”我有一大堆的“文件”。

我已经发表在服务器/ publications.coffee相关信息

Meteor.publish 'files', (boxId)-> 
    console.log boxId 
    return Files.find({boxId:boxId}) 

我的 '盒子' 文件有一个订阅句柄:

@filesHandle = Meteor.subscribe 'files', Session.get('currentBoxId') 

而且currentBoxId被保存在session变量。

这里是疯狂的一部分:我想到这个工作,而且它在我第一次启动服务器。第一位代码中的console.log输出正确的ID。然后,突然间,控制台日志突然开始返回“null”,即使在console.log会话变量在浏览器控制台中,它会正确返回。

我觉得这里有某种负荷异步的问题,但我不知道发生了什么事情。

任何线索?

+1

请记住流星会话不刷新页面之间坚持,不要指望值以在浏览器中保留,如果你按Ctrl + R。见http://projectricochet.com/blog/meteor-js-performance#.UlHsaBCc5pg –

+0

哇靠,你是对的。突然间,我不知道为什么我写的代码正在工作。刷新时,会话变量不被保留,但相关数据仍然被检索!你有什么想法这可能是可能的吗?这里是相关的代码... Template.boxPage.created =() - > @filesHandle = Meteor.subscribe'files',Session.get('currentBoxId') – Oliver

+0

等待,经过进一步检查,似乎我的会话变量会坚持页面刷新。流星改变了它处理会话的方式吗? – Oliver

回答

0

啊,想通了。显然,可以在设置会话变量之前渲染模板。通常情况下,您将集合句柄放在应用程序范围的main.js文件中,但如果订阅取决于会话变量,则这不起作用。

我做了以下内容:

Template.boxPage.created =()-> 
    @filesHandle = Meteor.subscribe 'files', Session.get('currentBoxId')