2013-10-06 53 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')