【发布时间】:2013-10-06 04:02:49
【问题描述】:
我正在制作一项没有用户帐户的服务,并且我想限制我正在访问的页面。
所以每个页面都是一个“盒子”,在每个“盒子”上我都有一堆“文件”。
我已经在 server/publications.coffee 中发布了相关信息
Meteor.publish 'files', (boxId)->
console.log boxId
return Files.find({boxId:boxId})
我的“盒子”文件有一个订阅句柄:
@filesHandle = Meteor.subscribe 'files', Session.get('currentBoxId')
并且currentBoxId存储在会话变量中。
这是疯狂的部分:我希望它能够工作,并且在我第一次启动服务器时它会起作用。第一段代码中的 console.log 打印出正确的 ID。然后,突然控制台日志突然开始返回“null”,即使我在浏览器控制台中 console.log 会话变量,它也正确返回。
我觉得这里存在某种加载异步问题,但我不知道发生了什么。
有什么线索吗?
【问题讨论】:
-
请记住,Meteor Session 在页面刷新之间不会持续存在,如果您在浏览器中按 Ctrl+R,请不要指望保留该值。见projectricochet.com/blog/meteor-js-performance#.UlHsaBCc5pg
-
天哪,你是对的。突然间,我不知道为什么我写的代码能正常工作。当我刷新时,会话变量没有被保留,但相关数据仍然被检索到!你知道这怎么可能吗?这是相关代码...Template.boxPage.created = ()-> @filesHandle = Meteor.subscribe 'files', Session.get('currentBoxId')
-
等等,经过进一步检查,似乎我的会话变量在页面刷新期间确实存在。 Meteor 是否改变了它处理会话的方式?
-
如果你 Ctrl+R 你的 Session 被清除,但是如果你做一个“热代码推送”,即更改代码并且为你刷新浏览器,Session 会被保留(这个差异让我感到震惊几次寻找一个错误,结果证明是键盘和椅子之间的错误);)我还看到一些使用 localStorage 来尝试维护会话的包(不记得他们的名字),所以也许您的项目中有其中之一。
-
@BobDavies 指出这是一个极好的事实。谢谢。